:禁用选择器在Jquery Validate忽略子句中不起作用[重复]

Posted

技术标签:

【中文标题】:禁用选择器在Jquery Validate忽略子句中不起作用[重复]【英文标题】::disable selector not working in Jquery Validate ignore clause [duplicate] 【发布时间】:2021-12-29 13:23:57 【问题描述】:

我在一个 html 页面上有多个 AJAX 填充下拉列表。使用 JQuery Validate 验证表单。

我已将下拉列表设置为“禁用”,直到 AJAX 完成,此时禁用的属性被删除。

这些字段的内容是强制性的。即使它们被禁用,我也想验证它们以防止用户提交仍在加载强制 AJAX 数据的表单。

我的 HTML 是:

<form id="myform">
  <select name="foo" id="foo" disabled="disabled">
    <option value="">Please Select</option>
    <option value="1">Option1</option>
  </select>
  <br/>
  <select name="bar" id="bar">
    <option value="">Please Select</option>
    <option value="1">Option1</option>
  </select>
  <br/>
  <input type="submit"/>
</form>

我在 JQuery Validate 中使用以下忽略参数,如下面的 cmets 中所建议:

$(document).ready(function() 
    $('#myform').validate(
    ignore:[],
        rules: 
            foo: 
                required: true
            ,
            bar: 
                required: true
            
        
    );
);

验证脚本似乎仍然没有忽略该字段的禁用状态。我做错了什么?

http://jsfiddle.net/aekntmor/

我尝试将一个类添加到禁用的下拉列表中,然后这样修改脚本。

<select name="foo" id="foo" class="validate-disabled" disabled="disabled">
    <option value="">Please Select</option>
    <option value="1">Option1</option>
 </select>
ignore: ':disabled:not(.validate-disabled)',

【问题讨论】:

我想你可能不完全理解ignore 的含义。在这种情况下,它的意思是“不验证”。您的 jsFiddle 的工作方式与它应该工作的方式完全一样。您已将插件设置为“忽略”禁用的字段。我单击提交按钮,禁用的字段被忽略......它没有经过验证。请解决您的问题。您还应该在帖子中包含演示代码以及有一天可能不存在的 jsFiddle。 如果你想验证一个禁用的字段,那么你必须用更有意义的东西覆盖ignore,比如“忽略任何东西”,看起来像ignore: []。如果验证所有内容太多,那么您必须编写一个自定义选择器来忽略某些隐藏/禁用元素而不是其他元素。 啊!我知道了。我的印象是“忽略”忽略了默认排除项。 (例如隐藏,禁用,图像等)但是,我一直在尝试修改小提琴以使其正常工作,并且即使忽略:[],也无法获得允许通过禁用字段输入的验证:[]。 我已经更新了小提琴并按要求发布了代码,但仍然无法让禁用的字段通过任何验证。任何帮助将不胜感激。 我查看了源代码。禁用字段被明确排除在验证期间。一种解决方法可能是将选择的值保存在 hidden 字段中(您可以像之前尝试的那样使用 ignore 验证那些),然后在 errorPlacement 回调中使用条件,移动隐藏字段的消息,以便它在禁用的select旁边。 【参考方案1】:

使用此插件无法完成。

我不确定验证禁用元素的方法是否是一个好主意或是否会带来良好的 UX(用户体验),并且禁用元素已被开发人员明确排除在外。

查看version 1.19.3 of the jQuery Validate plugin的源代码,可以看到任何禁用的元素都不会被考虑进行验证:

elements: function() 
    ...
    return $( this.currentForm )
    .find( ... )
    .not( "... :disabled" ) ....

【讨论】:

以上是关于:禁用选择器在Jquery Validate忽略子句中不起作用[重复]的主要内容,如果未能解决你的问题,请参考以下文章

jQuery Validate onclick: false 不适用于复选框或选择

jQuery-validate 自定义规则导致其他无效字段被忽略

MVC中 jquery.validate取消忽略对hidden的验证

当 jquery.validate 验证表单时启用提交按钮

jQuery Validate 无法验证 chosen-select元素

为啥 jQuery 选择器在这里不起作用?