【问题标题】:How to reselect already selected option如何选择已选择的选项
【发布时间】:2013-12-12 15:25:13
【问题描述】:

标题似乎令人困惑,但我想做的是......

只有当用户选择新选项时我才知道如何处理 - $('select').change(function(){})。`

但如果用户想要选择已经选择的选项,则不是。

我也尝试过 radio 但同样的事情。

好的,例如,我有一个带有选项(红色、蓝色、绿色)的选择。

<select>
    <option value="red">RED</option>
    <option value="blue">BLUE</option>
    <option value="green">GREEN</option>
</select>

我有这个脚本:

$('select').change(function(){
    var val = $(this).val();
    alert(val);
});

当我选择选项“蓝色”时,它会提醒一个值“蓝色”,然后我选择“绿色”它也会提醒“绿色”。但是当我再次选择“绿色”时,什么也没有发生。

【问题讨论】:

  • 没有得到你想要解释的内容......请更具体
  • 你试过收音机click()吗?
  • 如果您使用的是选择标签,我会将所选选项设为“请选择一个值”,然后您可以在提交时检查它是否具有通用值以提示用户选择字段需要更改。
  • 尝试使用.blur()事件。
  • 随着模糊,我似乎需要单击其他地方以移除对选择的焦点,以便触发该功能。

标签: javascript jquery html select


【解决方案1】:

这个问题引起了我的注意,因为这是非常基本的东西,但没有人真正深入研究它。 OP 一直在使用change(),但是当您重新选择当前选择的选项时,什么都不会触发!

我尝试了click(),但在您选择选项之前它就已启动。

使用blur(),在您完成选择后不会触发任何内容,因为选择元素仍处于聚焦状态,因此您需要像在外部单击一样聚焦才能执行。

所以我只是建议 OP 切换到 radio 类型输入,然后使用 click() 事件处理执行。这样您仍然可以重新选择已标记的单选按钮。

但后来我注意到您只需要第二次点击 &lt;select&gt; 元素,因为第一次点击会打开选项下拉列表,第二次点击会返回您选择的选项的值。所以我想出了这个:

$('select').click(function(){
    var $this = $(this);

    if ($this.hasClass('open')) {
        alert($this.val());
        $this.removeClass('open');
    }else {
        $this.addClass('open');
    }  
});

但现在的问题是,当您第一次单击 &lt;select&gt; 时,下拉菜单会显示出来,我们还添加了 'open' 类。然后点击其他地方(不选择选项),下拉菜单被隐藏,所以当你点击&lt;select&gt; 时,事件在你甚至可以选择一个选项之前被触发。

所以我添加了这段代码来解决这个问题:

$(document).click(function(e){
   var $select = $('select');

    if (!$select.is(e.target)){
        $select.removeClass('open'); //reset the steps by removing open
    }
});

您可以在此jsfiddle 中对其进行测试。干杯!


我认为当&lt;select&gt; 失去焦点时也是一个问题。所以我添加了blur() 事件。查看此更新jsfiddle

【讨论】:

  • 我已经在 Chrome 和 Firefox 上测试过了,它运行良好。有人也可以在其他浏览器上确认。谢谢
  • 哦,这很好,很好的解释!再次感谢。我已经在 IE 11 和 10 上对其进行了测试,并且运行良好。
  • &lt;option&gt; 元素上的事件呢?我们可以在这些上设置一个点击监听器吗?
【解决方案2】:

我使用onclick='this.value=-1' 解决了将选择重置为空...

【讨论】:

    【解决方案3】:

    在用户选择已经选择的选项时什么都不应该发生的情况下,我认为这是 DOM 的“功能”,而不是没有事件发生的错误。但是,如果您的代码使用 &lt;select&gt; 做的比进行简单的选择更多,那也是一种麻烦,所以我很感激其他人在这里解决了这个问题。

    current accepted answer 巧妙地使用了点击事件来捕获对已选择的&lt;select&gt; 选项的选择,但是如果您愿意指定列表的长度 作为(在这种情况下)&lt;select size=3&gt;,您可以简单地将“更改”事件中的选定值设置为“”,每次都会触发相同的选择。

    在这种情况下,the OP's example 将更改为:

    HTML:

    <select size=3>
        <option value="red">RED</option>
        <option value="blue">BLUE</option>
        <option value="green">GREEN</option>
    </select>
    

    jQuery:

    $('select').change(function(){
        var val = $(this).val();
        alert(val);
        $('select').val("");
    });
    

    唯一的副作用是选择元素现在可能以三行而不是一行的形式显示给用户

    (将选择的value 设置为“”的想法归功于Kirby L. Wallace)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-31
      • 2019-07-11
      • 1970-01-01
      • 1970-01-01
      • 2015-10-09
      • 2021-06-14
      • 1970-01-01
      • 2021-11-07
      相关资源
      最近更新 更多