基于输入值的jQuery显示/隐藏选项

时间:2013-09-26 00:47:23

标签: javascript jquery input option

我有一个表单,需要根据用户的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();
}

});

应该很简单,但没有雪茄。

3 个答案:

答案 0 :(得分:2)

您需要在此处更改两件事:

  1. 您需要为zip输入元素设置事件处理程序。执行该行时,$('#zip').val( ... );仅设置值一次

  2. 您需要更好地选择该选项。 $("#location option[value='In Range']").show();不会显示您想要的选项。您必须将选择器输入的值设置为与所需选项匹配的值。

  3. 将您的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选择器输入的值设置为您要选择的选项的正确值。

    DEMO

答案 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