per*_*ius 5 validation jquery jquery-validate jquery-ui-accordion
我正在使用jQuery手风琴将我的表单拆分成几个面板和jQquery验证来检查必需的字段.只要它们在打开的面板中,它就可以很好地显示已验证字段中的错误.
一个例子.假设我有树式手风琴面板,首先我有两个需要验证的表格字段.现在,如果访问者切换到面板二或三并提交表单而没有填写面板上的必填字段,我希望第一个手风琴面板打开并显示错误.
有没有人知道如何使这项工作?
这是我今天使用的代码:
$(document).ready(function() {
$("#accordion").accordion({
autoHeight: false,
navigation: true,
});
$("#validate_form").validate({
rules: {
page_title: "required",
seo_url: "required",
AccordionField: {
required: true
}
},
ignore: [],
messages: {
page_title: "Please enter a page title",
seo_url: "Please enter a valid name"
}
});
});
Run Code Online (Sandbox Code Playgroud)
要解决您问题中的具体问题,您只需提供一个invalidHandler回调函数,该函数调用Accordion 小部件的activate()方法来打开第一个窗格:
$("#validate_form").validate({
// your options,
invalidHandler: function(form, validator) {
if (validator.numberOfInvalids() > 0) {
$("#accordion").accordion("activate", 0);
}
}
});
Run Code Online (Sandbox Code Playgroud)
也就是说,处理一般情况(任何窗格上的无效元素)并切换到适当的窗格可能会更好。为此,我们必须从invalidHandler回调中获取第一个无效元素。我们可以匹配errorClass验证引擎使用的(error默认情况下),但是我们不能盲目匹配,因为该类也应用于错误消息标签。使用:input选择器限制结果将在这里帮助我们。
从那里,我们可以使用closest()来匹配祖先的手风琴窗格,并使用index()来获取其相对于其他窗格的索引,这将导致我们得到以下代码:
$("#validate_form").validate({
// your options,
invalidHandler: function(form, validator) {
if (validator.numberOfInvalids() > 0) {
validator.showErrors();
var index = $(":input.error").closest(".ui-accordion-content")
.index(".ui-accordion-content");
$("#accordion").accordion("activate", index);
}
}
});
Run Code Online (Sandbox Code Playgroud)
更新:我们还必须showErrors()在 our 中显式调用,因为该函数首先invalidHandler负责用类装饰无效元素,但通常只在之后调用。error(来源:http://forum.jquery.com/topic/jquery-validate-invalidhandler-is- Called-before-the-errors-are-shown-maybe-better-vice-versa 。)
| 归档时间: |
|
| 查看次数: |
10507 次 |
| 最近记录: |