我有一个AccordionPanes集合,其中包含各种TextBox控件和DropDownLists,每个都有自己的验证器。
如果在表单提交上发生了一些服务器端验证,是否有些东西可以自动扩展包含无效验证器消息的先前最小化窗格?否则,用户似乎无理由地提交表单。
另一种情况:假设我有多个窗格,客户端验证器绑定到输入。如果窗格最小化(因此您无法看到验证程序的ErrorMessage),是否有办法在提交时进行AJAX页面验证时展开相应的窗格?
我知道这种方法有一种蛮力的方式,我跟踪每个验证器及其相关的AccordionPane,但我希望有一个更好的解决方案,可以处理我的大量输入/验证器和窗格的情况
答案 0 :(得分:3)
这样的事情怎么样(使用JQuery,但我确信它可以转换成普通的javascript)......
$(document).ready(function(){
if (isPostback()){
$.each(Page_Validators, function(index, validator) {
if (!validator.isvalid) {
// do something here to locate the accordion based on the validator
// $(this) is the currently invalid validator element as a jquery object/wrapped set
// so for example...
$(this).parent().slideDown();
// This assumes that the immediate parent of of the validator is the accordion which is unlikely but if you post your emitted html I can write the appropriate selector for you.
}
});
}
});
因为您不希望它在初始加载时触发,您可以使用这样的技术How to detect/track postback in javascript?并检查您是否在文档之后的回发中。我已经假设您已经使用了链接和您的回发检测功能称为isPostback()。
答案 1 :(得分:1)
Rich打败了我,但这里是vanilla js版本(ie9 +):
Page_Validators
.filter(function(v) { return !v.isvalid; })
.forEach(function (v) { console.log(v.parentNode); });
请记住将代码放在< / form> -tag下面。我在使用jQuerys document.ready和window.onload方面遇到了问题,因为它可能会在加载asp.net所需的所有JavaScript之前执行代码。
更新:更兼容浏览器的版本
for(var i = 0; i < Page_Validators.length; i++) {
var validator = Page_Validators[i];
if (!validator.isvalid) {
console.log(validator.parentNode);
}
}
答案 2 :(得分:1)
有一个针对此问题而构建的项目尝试查看它....您还可以下载源代码以分析更多详细信息,或者如果您愿意,可以使用相同的代码库.... {{3} }