从以下代码可以清楚地看到,我试图遍历所有选择框,但不包括某些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
。如上所述,没有多个属性它可以正常工作。对于多个选择框,它会跳过验证。
UPDATE-2
或者有没有更简单的方法将当前的selectbox id与id&amp;数组匹配。如果找到,那么只需忽略任何规则中的特定选择框。
答案 0 :(得分:1)
删除选择器和 :selected
伪选择器之间的空格。空间在jQuery中非常重要。
运行此JSFiddle,看起来你的jQuery选择器工作得很好。这可能是你的类切换不能按预期工作的代码。
您的选择器也适用于multiple
选择器选项:JSFiddle
我想我终于明白了问题所在 - 因为你在select元素中有多个选择,你必须首先选择<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
});
当然,您的验证逻辑可能不同(例如,您希望所有选项有效),但我认为您应该能够自行修改它。
答案 1 :(得分:0)
您的复选框是否包含.selectpicker类或者是.selectpicker的子项? 因为您要选择每一个:在.selectpicker之后选择以下。
答案 2 :(得分:0)
$(&#39; .selectpicker:not(&#34; #Fresher,#Simple,#Advanced&#34;):selected&#39;)。each(function(i,sel){
});
这可以解决您的问题。
答案 3 :(得分:0)
发布的建议/答案没有按照问题要求工作,因此我必须使用UPDATE-2
alertnative找到一些其他方法,根据需要使用[ bingo ]。希望这也可以帮助其他人!!
应排除ID元素
var codes = ["Fresher", "Simple", "Advanced"];
修改了jquery
$('.selectpicker').each(function(i, sel){
var idname = $(sel).closest('.selectpicker').attr('id');
if($.inArray(idname, codes) == -1)
{
if (!$(idname).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');
}
}
});
现在使用上面的代码,我们可以在多个页面上更灵活地忽略某些ID。
感谢大家的帮助。特别是 @mdziekon