即使重新选择相同的选项,也为选择运行更改事件

IT技术 javascript jquery html onchange
2021-01-18 11:41:08

基本上,我有如下所示的下拉菜单:

<select>
  <option>0</option>
  <option selected="selected">1</option>
  <option>2</option>
  <option>3</option>
</select>

我正在尝试编写一个即使在您选择相同选项时也会触发的函数,即即使打开下拉列表并重新选择所选选项,我也希望它执行该函数。

5个回答

如果您的意思是用鼠标选择,则可以使用mouseup. 但是,它也会在打开选择框时触发,因此您需要跟踪触发的次数(偶数:选择正在打开,奇数:选择正在关闭):http:/ /jsfiddle.net/T4yUm/2/

$("select").mouseup(function() {
    var open = $(this).data("isopen");

    if(open) {
        alert(1);
    }

    $(this).data("isopen", !open);
});
这是一个很好的解决方法,但它并不是很稳定。如果有人使用鼠标单击选择下拉菜单,然后使用键盘选择一个条目open将处于错误状态,并且下次用户打开下拉菜单时将触发该事件。
2021-03-19 11:41:08
这很棒,真的对我有帮助,我添加了一些改进,请参阅下面的答案
2021-03-21 11:41:08

pimvdb 的回答对我有很大帮助,但我添加了一些额外的位来处理键盘激活和远离选择的导航:

$('select').mouseup(... as in pimvdb... )
  .blur(function() {
     $(this).data('isopen', false);
  }).keyup(function(ev) {
     if (ev.keyCode == 13)
        alert(1);
  });

当下拉菜单打开时,模糊处理程序处理从选择导航离开,当您使用键盘更改选择的值时,keyup 处理程序处理。然后行为是当用户单击返回导航离开时,才认为用户最终选择了该值。如果您想要键盘的不同行为,那应该不难做到。

select不打算以这种方式使用 - 在大多数情况下,您可以使用一些技巧来获得这种行为,例如在 上跟踪鼠标和键盘事件select,但不能保证它们会继续工作,或在每个平台上工作.

我建议要么...

  1. select在更改时将重置为其默认值,并使用其他一些文本来指示哪个被“选中”,或
  2. 使用select.以外的控件

你能更详细地描述一下最终目标吗?

尽管如此,它实际上是这样使用的,它是完全合理的,而不是设计上的缺陷。
2021-04-11 11:41:08

另一种选择,使用.blur()事件 ——http://jsfiddle.net/VKZb2/4/

无论哪种方式,这都会触发。

骗局

只有在控件失去焦点时才会触发。

我遇到了同样的问题。我刚刚在选项标签中添加了一个点击事件并更改了选择的值:

$("#select option").mouseup(function() {
    $(this).parent().val($(this).attr("value"));
    // do something.
});

注意:这不适用于 iPhone 或 iPad 设备。