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

时间:2011-10-12 15:41:53

标签: javascript jquery html onchange

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

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

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

5 个答案:

答案 0 :(得分:14)

如果您的意思是使用鼠标进行选择,则可以使用mouseup。但是,它也会在打开选择框时触发,因此您需要跟踪它被触发的次数(即使:正在打开选择,奇数:选择正在关闭):{{3 }}

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

    if(open) {
        alert(1);
    }

    $(this).data("isopen", !open);
});

答案 1 :(得分:3)

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

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

模糊处理程序处理在下拉列表打开时离开选择,键盘处理程序处理当您使用键盘更改选择的值时。然后,行为是当用户单击返回导航时才被认为最终选择了该值。如果你想要一个不太难做的键盘的不同行为。

答案 2 :(得分:2)

select并不意味着以这种方式使用 - 在大多数情况下,您可以使用黑客来获取此类行为,例如跟踪select上的鼠标和键盘事件,但是不保证他们会继续工作,或在每个平台上工作。

我建议......

  1. 在更改时将select重置为默认值,并使用其他一些文字指示哪一个是“已选中”,或
  2. 使用select以外的控件。
  3. 你能更详细地描述最终目标吗?

答案 3 :(得分:1)

另一种方法是,使用.blur()事件 - http://jsfiddle.net/VKZb2/4/

<强>临

这将以任何一种方式开火。

<强> N

一旦控件失去焦点,它才会触发。

答案 4 :(得分:0)

我遇到了同样的问题。我刚刚在选项标签中添加了一个click事件,并更改了select:

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

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