使用select2在jQuery验证时无法读取nodeName的属性

时间:2017-08-22 18:24:58

标签: javascript jquery jquery-validate jquery-select2

我正在尝试在select2下拉列表中添加jQuery验证。但是,它一直导致“nodeName undefined”的javascript异常,我不确定出了什么问题。

 $(".field-validation-required").each(function() {

     // output SELECT, if current html class is a select2 dropdown.
     console.log(this.nodeName); 

     $(this).rules('add', {
        required: true,
        messages: {
          required: "This field is required"
        }
     }); 
 });

我的select2下拉列表包含'.field-validation-required'类,我正在尝试对它应用一些jQuery验证。但似乎$(this)总是导致“无法读取nodeName undefined的属性”错误。

1 个答案:

答案 0 :(得分:1)

  

我的select2下拉列表包含类.field-validation-required,我正在尝试对其应用一些jQuery验证。但似乎$(this)总是导致"Cannot read property of nodeName undefined"错误。

向我们展示相关的HTML标记;否则,我无法复制你的错误。

您的原始select是否包含唯一的name?这是由插件强制执行的,缺少或重复的name可能是您的错误消息的根本原因。

您的.field-validation-required课程是原始select元素还是动态创建的Select2元素?

如果它在select元素上,那么它应该有效。如果它在Select2元素上,那么它将无法工作。

您只能将jQuery Validate应用于selecttextarea,某些inputcontenteditable元素......没有别的。

定位原始的隐藏select元素而不是Select2元素。然后,由于插件将忽略所有隐藏元素,因此您需要将ignore选项设置为某些不忽略隐藏select元素的jQuery选择器。例如,ignore: []将告诉插件忽略任何内容并验证所有隐藏元素。

或者,您可以按类或HTML5属性将required规则应用于原始select元素。您仍然需要如上所述设置ignore选项。

<select name="myselect" class="required" ....

<select name="myselect" required="required" ....