2017-07-19 28 views
2

对于搜索表单我只想显示复位按钮时,从四个可用的选择至少一个选项被选中,并隐藏了一次所有选择字段已被重置。 用下面的jQuery我解决这些问题一下子,这当然用于显示按钮工作正常,但是当我有一个以上的选择字段,例如选择选项选择了“颜色”和“尺寸”,只要清除两个选择选项中的一个,重置按钮就会消失。jQuery的:隐藏元素时没有选择字段选项已选定(多个字段)

如何让jQuery确保全部选择已被重置以隐藏重置元素?

当前的代码:

jQuery('#my_searchform select').change(function() { 
    if(jQuery(this).val()) { 
     jQuery('.reset').show(); 
    } else { 
     jQuery('.reset').hide(); 
    } 
}); 
+0

我认为你应该检查每个选择和比较的电流值 “.VAL()” 与第一个选项” .find( '选项')。 eq(0)“值。如果它们相等,则选择复位。 – MVG1984

回答

2

你需要检查其他的选择还。

jQuery('#my_searchform select').change(function() { 
    if(!($("#select1").val()||$("#select2").val()||$("#select3").val()||$("#select4").val())){ 
     jQuery('.reset').hide(); 
    }else{ 
     jQuery('.reset').show(); 
    }}); 

select1,select2,select3,select4是选择ID。你也可以为他们分配一个普通的类,然后检查那些选择(带有类)以供决定。

+0

这实际工作。想到会有一种解决方案可以将单个ID命名为冗余,但到目前为止,这个解决方案效果最好!谢谢! – physalis

0

在这里你去解决https://jsfiddle.net/ngqrw1cz/2/

$('#my_searchform select').change(function() { 
 
\t \t var flag = false; 
 
    $('select').each(function(){ 
 
    \t if($(this).val() != ""){ 
 
     \t flag = true 
 
     } 
 
    }); 
 

 
    if(flag){ 
 
    \t $('.reset').show(); 
 
    }else{ 
 
    \t $('.reset').hide(); 
 
    } 
 
});
.reset { 
 
    display: none; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form id="my_searchform"> 
 
    <select> 
 
    <option value="">Select one option</option> 
 
    <option value="test1">Test 1</option> 
 
    <option value="test2">Test 2</option> 
 
    </select> 
 
    <select> 
 
    <option value="">Select one option</option> 
 
    <option value="test3">Test 3</option> 
 
    <option value="test4">Test 4</option> 
 
    </select> 
 
    <select> 
 
    <option value="">Select one option</option> 
 
    <option value="test5">Test 5</option> 
 
    <option value="test6">Test 6</option> 
 
    <option value="test9">Test 9</option> 
 
    </select> 
 
</form> 
 

 

 
<button type="sbumit" class="reset">Reset</button>

+0

嘿@Shiladitya,可惜没有,选择的ID不#my_searchform,它从形式本身的一个)。此外,它是关于多个选择字段,并且需要隐藏重置按钮,一旦所有选定的选项已被手动删除。但非常感谢你的帮助! – physalis

+0

@physalis ......给我一点时间将更新答案..对不起,我误解了这个问题.. – Shiladitya

1

你可以试试这个。

$('#my_searchform select').change(function() { 
 
    var isAnySelected=false; 
 
    $('#my_searchform select').each(function(){ 
 
     if($(this).val()!=""){ 
 
     isAnySelected=true;   
 
     } 
 
    }); 
 

 
    if(isAnySelected) { 
 
     $('.reset').show(); 
 
    } else { 
 
     $('.reset').hide(); 
 
    } 
 
}); 
 

 
$(".reset").click(function(){ 
 
    $('#my_searchform select').each(function(){ 
 
     $(this).val(""); 
 
    }); 
 
    $('.reset').hide(); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form id="my_searchform"> 
 
    <input type="button" value="Reset Form" class="reset" style="display:none;" /> 
 
    <br/><br/> 
 

 
    <label>Select1</label> 
 
    <select> 
 
    <option value=""> </option> 
 
    <option value="1">1</option> 
 
    </select> 
 
    <br/> 
 
    <label>Select2</label> 
 
    <select> 
 
    <option value=""> </option> 
 
    <option value="1">1</option> 
 
    </select> 
 
    <br/> 
 
    <label>Select3</label> 
 
    <select> 
 
    <option value=""> </option> 
 
    <option value="1">1</option> 
 
    </select> 
 
</form>

+0

哦,以为这样做,但它仍然不记录所有选项已被禁用了。 – physalis

0

我只是检查,看看是否有任何的输入填充使用过滤器

jQuery('#my_searchform select').change(function() { 
     if(jQuery(this).val()) { 
      jQuery('.reset').show(); 
     } else { 
      if(jQuery('#my_searchform select').filter(function(){return !this.value}).length === 0) { 
jQuery('.reset').hide(); 
} 
     } 
     }); 
0

为了解决您的问题(即:显示,如果按钮任何选择已选定的选项,只有隐藏在所有选择选项已被手动复位),你可以在下面的代码片段检验所选选项的号码,如:

$('select').on('change', function(e) { 
 
    $('.reset').toggle($('select option[value!=""]:selected').length > 0); 
 
}); 
 

 
$('button.reset').on('click', function(e) { 
 
    // on reset action reset and trigger the change event 
 
    $('select').val('').trigger('change'); 
 
});
.reset { 
 
    display: none; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 

 
<form> 
 
    Select a colour: 
 
    <select> 
 
     <option value=""></option> 
 
     <option value="red">red</option> 
 
     <option value="yellow">yellow</option> 
 
     <option value="black">black</option> 
 
     <option value="white">white</option> 
 
    </select> 
 

 
    Select a size: 
 
    <select> 
 
     <option value=""></option> 
 
     <option value="1">1</option> 
 
     <option value="2">2</option> 
 
     <option value="3">3</option> 
 
     <option value="4">4</option> 
 
    </select> 
 
    <br> 
 
    <button type="reset" class="reset" value="Reset">Reset</button> 
 
</form>

+0

不,这是另一种方式:如果任何选择有一个选择的选项,则显示该按钮,并且只有当所有选项的选项已被手动重置时才显示。 – physalis

+0

它没有,但无论如何,已经有一个解决方案:)。 – physalis

+0

@physalis我为你感到高兴。无论如何,如果你有时间可以看看更新后的代码片段?这仅仅是为了我个人的满意。非常感谢。 – gaetanoM

0

希望这helps-

$(document).ready(function() { 
    var resetBtn = $("#resetBtn"); 
    resetBtn.hide(); 

    function validateSelects(){ 
    var isSelected = false; 
    $.each($("select"),function() 
    { 
     if($(this).val() !== ""){ isSelected=true; console.log(isSelected);} 
    }); 
    return(isSelected); 
    } 

    // For the functionality. 
    $("#myform select").on("change",function(){ 
    if(validateSelects()) { 
     console.log("if " + validateSelects()); 
     resetBtn.show(); 
    }else { 
     console.log("else " + validateSelects()); 

     resetBtn.hide(); 
    } 
    }); 

}); 
相关问题