2013-12-11 37 views
0

我使用jQuery验证插件和我的表单可以验证如下(假设我有2场A和B):jQuery验证插件无法验证的KEYUP

使用:
点击一个并键入内容然后删除。然后我点击了B。在这种情况下,显示验证消息。

它不工作:
我**点击A并且不输入任何内容。然后我点击B.在这种情况下,与字段A相关的相关验证消息未显示。但我希望它如上所示。

我试图在验证方法中使用onsubmit,onkeyup和onclick参数,但它没有任何意义。我怎样才能提供这个?


剃刀:

jQuery(function() { 
    $.validator.setDefaults(
    $("#myform").validate({ 
     //onsubmit: false, ??? 
     //onkeyup: true, ??? 
     //onclick:true, ??? 
     onkeyup: function(element){this.element(element);}, 
     rules: { 
      'Applicant.Name': "required", 
      'Applicant.Surname': "required" 
     }, 
     messages: { 
      'Applicant.Name': "Please enter your Name", 
      'Applicant.Surname': "Please enter your Surname" 
     } 
    }) 
); 

}); 
+1

请添加您的选择器代码,然后我们可以看到缺少什么...... – Serdar

+0

@SerdarBuyuktemiz:我在问题的底部添加了。 –

回答

3

您的代码:

jQuery(function() { 
    $.validator.setDefaults(
     $("#myform").validate({ .... }) 
    ); 
}); 

重要:你不能把.validate()方法.setDefaults()内。它没有任何意义。

  • .validate()方法用于初始化表单上的插件(带选项)。

  • .validator.setDefaults()方法是用于设置将适用于所有形式的页面上的选项,但是,这种方法不会初始化什么。

如果要设置选项为#myform只有使用.validate() ...

jQuery(function() { 
    $("#myform").validate({ 
     // options only for #myform 
    }); 
}); 

如果要设置选项上使用所有形式在页面上,使用.validator.setDefaults()。然后,每个表单上使用.validate() ...

jQuery(function() { 

    $.validator.setDefaults({ 
     // options for all forms on page 
    }); 

    $("#myform").validate({ 
     // options only for #myform 
    }); 

    $("#myform2").validate({ 
     // options only for #myform2 
    }); 

}); 

默认插件操作:

默认情况下,该插件没有做任何“键向上”的验证,直到后场最初由另一个事件验证。

因此,这里是默认onkeyup回调函数的适当修改版本,因此会提供立即onkeyup验证。

DEMO:http://jsfiddle.net/QfKk7/

onkeyup: function (element, event) { 
    if (event.which === 9 && this.elementValue(element) === "") { 
     return; 
    } else { 
     this.element(element); 
    } 
} 

您的代码:

//onsubmit: false, ??? 
//onkeyup: true, ??? 
//onclick:true, ??? 

这些选项绝不设置为true

文件:关于模糊布尔或功能()
验证元素(除复选框/单选按钮):

onfocusout在
类型。如果没有输入任何内容,则跳过所有规则,除非该字段为 已被标记为无效。设置为一个函数来为您自己决定何时运行验证 。 布尔值true不是有效值


的onkeyup
类型:Boolean或功能()上KEYUP
验证元件。只要该字段没有被标记为无效,就没有任何反应。否则,将在每个键 起事件中检查所有规则。设置为false以禁用。设置为一个函数来自己决定何时运行验证 。 布尔值true不是有效的 值


的onclick
类型:Boolean或功能()
验证复选框和上点击单选按钮。只要该字段没有被标记为无效,就没有任何反应。否则,将在每个键 起事件中检查所有规则。设置为false以禁用。设置为一个函数来自己决定何时运行验证 。 布尔值true不是有效的 值


的onsubmit
类型:Boolean或功能()
验证上提交形式。只要该字段没有被标记为无效,就没有任何反应。否则,将在每个键 起事件中检查所有规则。设置为false以禁用。设置为一个函数来自己决定何时运行验证 。 布尔值true不是有效的 值

+0

亲爱的斯帕克,非常感谢您的完美解释(我投票赞成)。但我的需求有点不同。您能否修改代码以便提供这种情况?当用户直接点击字段A时,不会有任何验证。点击另一个字段(或字段A失去焦点)后,字段A将被验证(验证不应在每次键入之后完成,应在相关输入失去焦点后完成)。除此之外,如果用户直接单击提交按钮而不点击任何字段,则应验证所有相关字段。提前致谢。 –

+0

@ H.Johnson,如果不对每个键进行验证,当你简单地将'onkeyup'选项设置为'false'时会发生什么? – Sparky

+0

它似乎有效。但奇怪的是,虽然所有的验证规则,实体规则,类等等对于名字和姓氏字段是相同的,但它对第一次验证起作用(单击X字段并键入内容,然后将另一个字段和然后清除X字段上的文本)。我认为这不是已知的症状,所以我会研究这个问题。谢谢。 –