【问题标题】:jQuery Show / Hide Option Based on Input ValuejQuery 根据输入值显示/隐藏选项
【发布时间】:2013-09-26 00:47:23
【问题描述】:

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

});

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

【问题讨论】:

  • 隐藏选项元素不支持跨浏览器...您需要删除它们

标签: javascript jquery input option


【解决方案1】:

这里有两点需要修改:

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

  2. 您需要更好地选择该选项。 $("#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 选择器输入的值设置为您要选择的选项的正确值。

DEMO

【讨论】:

  • 这太棒了。谢谢你的简洁!我以后肯定会用这个。但我需要隐藏它,以便用户仍然可以选择一个。抱歉,我应该在示例中说明这一点。 . .
  • 谢谢,我误解了你所说的“隐藏”的意思。
【解决方案2】:

隐藏选项在浏览器中不起作用,它与将事件绑定到选项元素相同,您只能对它们做非常有限的事情。而是将它们删除并缓存以供以后使用。

$(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

【讨论】:

  • 当您可以通过设置选择器的值来匹配选项值来选择您想要的选项时,为什么要这样做?例如。 $("#location").val("In Range");
  • @RickHanlonII 见 OP。他想把它们藏起来。完整阅读问题。如果它只是设置一个值,他可能甚至不会在这里问这个问题.. 非常直截了当...
  • @RickHanlonII 是的,我需要用户仍然能够从列表中选择一个。 :( 我应该在示例中提到这一点。让我试试 PSL 的...
  • @Andrew 是的,你可以选择这个,唯一的问题是当它超出范围时,你不想向用户显示其他选项吗?
  • @PSL 正确。自己一个人试试就差不多了。 . .非常感谢你的帮忙!我会让你知道会发生什么。
【解决方案3】:

您应该使用以下方法监控值的变化:

$('#zip').on('keyup',function(){
    $("#location").val('Out Of Range');
    if ( $(this).val() == "12345" ) { 
        $("#location").val('In Range');
    }
});

on 函数将事件绑定到该元素。 keyup 事件侦听在您的字段内释放键的时间。然后,您可以将该值与以往的值进行比较,并根据需要显示/隐藏。

【讨论】:

  • 谢谢!我更新了我的代码以反映您的代码。 . .但我仍然无法让它工作。 ://
  • @Andrew 那是因为你“展示”你想要的选项的方式。请参阅我的答案以了解正确的方法。
  • 他是对的,我没有仔细研究您的问题,无法意识到您的选择器在哪里关闭。更新我的答案
  • 我在我的最终产品中使用了你的“keyup”功能!我什至不知道它的存在,所以非常感谢你。 ^_^
猜你喜欢
  • 2018-04-17
  • 2012-08-11
  • 2021-10-24
  • 1970-01-01
  • 2013-07-22
  • 1970-01-01
  • 1970-01-01
  • 2012-06-15
  • 2014-06-20
相关资源
最近更新 更多