我有一个表单,需要根据用户的ZIP显示特定的选择选项(“位置”),该ZIP位于上面的数字字段中。在这个例子中,我需要隐藏选项“超出范围”,并在输入中输入“12345”时显示“范围内”以显示。
这是我的HTML:
<!--Zip-->
<div class="zip-field">
<label for="zip">Zip Code</label>
<input type="number" id="zip" name="zip" />
</div>
<!--Location-->
<div class="location-field">
<label for="location">Location</label>
<select id="location" name="location">
<option value="In Range">In Range</option>
<option value="Out of Range">Out of Range</option>
</select>
</div>
这是我的jQuery:
$('#zip').on('change',function(){
if ( $(this).val() == "12345" ) {
$("#location option[value='In Range']").show();
$("#location option[value='Out of Range']").hide();
}
});
应该很简单,但没有雪茄。
答案 0 :(得分:2)
您需要在此处更改两件事:
您需要为zip
输入元素设置事件处理程序。执行该行时,$('#zip').val( ... );
仅设置值一次。
您需要更好地选择该选项。 $("#location option[value='In Range']").show();
不会显示您想要的选项。您必须将选择器输入的值设置为与所需选项匹配的值。
将您的javascript更改为:
$("#zip").on('blur', function(){
if ( $(this).val() == "12345" ) {
$("#location").val("In Range");
}else{
$("#location").val("Out of Range");
}
});
请注意,我正在使用$('#zip').on('blur', ...);
到register an event handler,将其设置为blur event并传入要在该事件触发时执行的函数。
然后我将location
选择器输入的值设置为您要选择的选项的正确值。
答案 1 :(得分:1)
您应该使用以下方法监视值的变化:
$('#zip').on('keyup',function(){
$("#location").val('Out Of Range');
if ( $(this).val() == "12345" ) {
$("#location").val('In Range');
}
});
on函数绑定事件侦听该Element。 keyup事件侦听在您的字段内释放密钥的时间。然后,您可以将值与之前的值进行比较,并根据需要显示/隐藏。
答案 2 :(得分:1)
隐藏选项不适用于浏览器,它与将事件绑定到选项元素相同,只能对它们进行非常有限的操作。而是删除它们并缓存它们以供以后使用。
$(function(){
var $location = $('#location');
$location.data('options', $location.find('option')); //cache the options first up when DOM loads
$('#zip').on('change', function () { //on change event
$location.html($location.data('options')); //populate the options
if ($(this).val() == "12345") { //check for condition
$location.find("option[value='Out of Range']").remove(); //remove unwanted option
}
});
});
<强> Fiddle 强>