与jquery.validate一起使用时,livequery并不总是存在

时间:2010-10-08 12:43:52

标签: asp.net-mvc jquery-validate xval jquery

我使用jquerylive插件向.field-validation-error类添加额外的css类,如下所示:

$(".field-validation-error").livequery(function () { 
    $(this).addClass('ui-state-error ui-corner-all'); 
});

当我得到jquery.validate生成的这个类的一些跨度时,上面的代码可以工作,但是在第二次验证时它没有。

这是实时链接: http://mrgsp.md:8080/awesome/person 单击“保存”后单击“创建”以获取验证消息,然后再次单击“保存”

2 个答案:

答案 0 :(得分:1)

你能不只是errorClass选项?

$(".selector").validate({
   errorClass: "field-validation-error ui-state-error ui-corner-all"
})

或者也许:

$.validator.setDefaults({ 
   errorClass: "field-validation-error ui-state-error ui-corner-all"
});

答案 1 :(得分:1)

为什么不将函数挂钩到触发validate()的同一事件?

<强>更新

我阅读了其他评论,看到你正在使用xVal,也读了一下jQuery.Validate。 jQuery.Validate与许多事件联系在一起并在事件处理程序上注册会很混乱。 livequery第一次工作的原因是,如果标签之前不存在,则生成标签,以便创建事件使函数运行,每次标签被隐藏/显示之后,所以它不会再次触发,而是jQuery。 validate的showLabel函数重置类。

理想的位置是xVal,在xVal.jquery.validate.js文件中进行一次小的更改。在_ensureFormIsMarkedForValidation方法中有以下几行:

ensureFormIsMarkedForValidation: function(formElement, options) {
        if (!formElement.data("isMarkedForValidation")) {
            formElement.data("isMarkedForValidation", true);
            var validationOptions = {
                errorClass: "field-validation-error",

您需要做的就是将errorClass更改为:

errorClass: "field-validation-error ui-state-error ui-corner-all",

这是因为xVal正在设置validate插件。