jquery - 在加载时在 iframe 内容中添加客户端不显眼的验证规则
问题描述
环境上下文:ASP.NET MVC 5 和 jquery 不显眼的验证
我们有一些用户定义的字段,某些用户需要这些字段,而其他用户则不需要。因此,基于当前用户的帐户,我正在尝试仅添加客户端验证规则,其行为类似于服务器端数据注释规则。但也许这是错误的方法?也许我应该创建一个自定义数据注释验证规则服务器端然后让客户端自己处理?
无论如何,这就是我所拥有的:
function validateWorkOrderFormOnLoad() {
//Parses the new form for unobtrusive validation
var $form = $('form');
if (intAccountId === 1) {
//MUST INITIALIZE THE VALIDATOR FIRST
var validator = $form.validate();
$("#WOHdr_Attribute3").rules("add", {
required: true,
messages: {
required: attribute3 + " is Required."
}
});
$("#WOHdr_Attribute4").rules("add", {
required: true,
messages: {
required: attribute4 + " is Required."
}
});
}
//$form.removeData('validator');
//$form.removeData('unobtrusiveValidation');
$.validator.unobtrusive.parse($form);
var isValid = $form.valid();
}
在 iframe 内容(不是父级)的文档加载时调用它:
$(function () {
setTimeout(function () {
validateWorkOrderFormOnLoad();
}, 2000);
});
这有效。但正如你所看到的,我必须延迟,我不喜欢这样,而且闻起来有点老套。
我尝试从 iframe 加载事件中调用此方法:
$iframe.load(function () { validateWorkOrderFormOnLoad(); });
这来自 iframe 内容页面中的脚本选项卡:
window.onload = function () {
var $form = $("#frmWorkOrderHdr");
parent.validateWorkOrderFormOnLoad($form);
}
在 iframe onload 事件上:
<iframe style="border:0px;width:100%;height:100px;display:none;" onload="validateWorkOrderFormOnLoad(this)" src=""></iframe>
除非我延迟,否则这些方法都不起作用。我错过了什么?哪个事件应该调用这个方法来显示表单加载的错误?
解决方案
事实证明,我在加载时隐藏的表单上对此进行了测试,默认情况下,验证不会验证隐藏的元素。所以我不得不通过将忽略列表设置为空来告诉它不要忽略隐藏元素:
$form.validate().settings.ignore
它与延迟一起工作的原因是,表单会在加载后的某个时间显示,并且在延迟触发事件之前。
推荐阅读
- maven - Jenkins 使用 Deploy to Container 插件部署到 JBoss EAP7
- docker - 当 dockerfile 在项目内的文件夹中并且解决方案包含多个项目时运行 docker
- php - 使用 CakePHP 4 发送电子邮件
- notepad++ - 删除记事本++中两个字符之间的单个空格
- cplex - 有人在 OPL 中使用过 Ford Fulkerson 算法吗?
- c# - 如果身份服务器发现文档无法访问,则处理错误
- asp.net-core - endpoints.MapFallbackToFile("index.html") 弄乱了 asp.net 核心项目中的路由
- python - 将火花流写入 Mongodb 接收器的问题
- python - Tkinter 按钮中的命令是否存储在按钮中?
- amazon-web-services - 如何在 Lambda 中读取任何事件的标签(AWS 服务)