javascript - 使用 .each() jquery 进行多个选择框值测试

标签 javascript jquery

从下面的代码可以清楚地看出,我正在尝试循环所有选择框,但排除一些 id。

问题是

如果不使用非选择器,它会循环遍历所有选择框并执行其应该执行的操作。但是当与 .not() 选择器一起使用时,它会跳过多个类型选择框。我是否使用了错误的语法或在这里遗漏了某些内容。

$('.selectpicker:not("#Fresher, #Simple, #Advanced") :selected').each(function(i, sel){
    if (!$(sel).val()){
        $(this).closest("div:has(label)").find(".bootstrap-select").removeClass('formvalid').addClass('formerror'); 
        $(this).closest("div:has(label)").find("span.validation").removeClass('valid').addClass('error');
    }else{
        $(this).closest("div:has(label)").find(".bootstrap-select").removeClass('formerror').addClass('formvalid');
        $(this).closest("div:has(label)").find("span.validation").removeClass('error').addClass('valid');           
    }
}); 

HTML

<select id="Fresher" name="Fresher" multiple class='selectpicker show-menu-arrow' data-width='100%' data-size='10' title='Select Saved Search'>
 <option class="bs-title-option" value="">Select Saved Search</option>
 <option value="61">QUALITY</option>
 <option value="62">TEST</option>
 <option value="64">NEW SEARCH</option>
 <option value="66">NEW SEARCH</option>
</select>

<select id="f_Min_salary" name='Min_salary' class="selectpicker show-menu-arrow" data-width="100%" data-size="10" title='Select Min Salary'>
 <option class="bs-title-option" value="">Select Min Salary</option>
 <option value="101"><1 lakh</option>
 <option value="102">1 lakh</option>
 <option value="103">1.5 lakh</option>
 <option value="104">2 lakh</option>
</select>

更新

抱歉:我忘记在第一个选择框中添加属性MULTIPLE。没有多个属性,它可以正常工作,正如我上面提到的。对于多个选择框,它会跳过验证。

更新2

或者是否有任何更简单的方法将当前选择框 ID 与 ID 数组相匹配,如果找到,则只需从任何规则中忽略该特定选择框即可。

最佳答案

删除选择器和 :selected 之间的空格伪选择器。空格在 jQuery 中非常重要。

<小时/>

编辑:

运行此JSFiddle ,看起来您的 jQuery 选择器工作得很好。可能是您的类切换代码未按您的预期工作。

<小时/>

编辑2:

您的选择器与 multiple 配合得很好选择器选项:JSFiddle

<小时/>

编辑3:

我想我终于明白问题是什么了 - 由于您的选择元素中有多个选择,因此您必须首先选择 <select>元素,然后然后检查是否至少做出了一项有效选择。

$('.selectpicker:not("#Fresher, #Simple, #Advanced")').each(function (idx, selectEl) {
    var $selectEl = $(this);

    var isValid = false;
    $selectEl.find(":selected").each(function (idx2, optionEl) {
        var $optionEl = $(this);

        if ($optionEl.val()) {
            isValid = true;

            // This will break the loop on first valid element
            return false;
        }
    });

    console.log("isValid: ", isValid);
    // rest of your code
});

当然,您的验证逻辑可能会有所不同(例如,您希望所有选择都有效),但我认为您应该能够自行修改它。

关于javascript - 使用 .each() jquery 进行多个选择框值测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39307508/

相关文章:

javascript - js 损坏文件仅适用于某些页面

javascript - 简化功能,使代码不会变得太大

javascript - 使用 jQuery 下载链接

javascript - 如何从 HTML 和 JavaScript 发布实时视频流?

javascript - 如何从tinymce编辑器中删除特殊字符

jquery - 如何使用 jQuery 设置选择框的第一个选项的值?

jquery - 根据文本框的输入动态显示/隐藏div

javascript - 如果 Boolean(1.2) 实际上为 true,为什么 1.2 == true 返回 false?

javascript - 为什么我无法让每个 tr 标记的事件发挥作用?

javascript - 阻止 Chrome 在我的网站上自动建议信用卡号码