我有一个包含各种文本框控件和下拉列表的手风琴窗格集合,每个控件都有自己的验证器。
如果在表单提交时发生了一些服务器端验证,是否有某些内容可以自动展开包含无效验证程序消息的先前最小化的窗格?否则,用户会认为表单无法无缘无故提交。
另一种情况:假设我有多个窗格,其中客户端验证器绑定到输入。如果窗格最小化(因此看不到验证程序的错误消息),有没有办法在提交时进行 AJAX 页面验证时展开相应的窗格?
我知道这种方法有一种蛮力的方法, 我跟踪每个验证器及其相关的 AccordionPane, 但我希望有一个更好的解决方案来处理我的情况,用于大量输入/验证器和窗格.
像这样的东西怎么样(使用 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.
}
});
}
});
因为你不希望它在初始加载时触发,所以你可以使用这样的技术 如何在javascript中检测/跟踪回发? 并检查您是否在文档之后进行回发.ready - 我假设您已经使用了链接中的建议,并且用于回发检测的函数称为isPostback()。
为这个问题构建的项目,试着看看它......您还可以下载源代码以分析更多详细信息,或者根据需要使用相同的代码库。http://www.codeproject.com/Articles/43397/Validating-Accordion-and-RadPanelBar-using-Ajax-an
Rich 打败了我,但这里是香草 js 版本(ie9+):
Page_Validators
.filter(function(v) { return !v.isvalid; })
.forEach(function (v) { console.log(v.parentNode); });
请记住将代码放在 标签下方。我在使用 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);
}
}