基本上,我有下拉菜单,如下所示:
<select>
<option>0</option>
<option selected="selected">1</option>
<option>2</option>
<option>3</option>
</select>
我正在尝试编写一个即使您选择相同选项也会触发的函数,即使打开下拉列表并重新选择所选选项,我希望它执行该函数。
答案 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
上的鼠标和键盘事件,但是不保证他们会继续工作,或在每个平台上工作。
我建议......
select
重置为默认值,并使用其他一些文字指示哪一个是“已选中”,或select
以外的控件。你能更详细地描述最终目标吗?
答案 3 :(得分:1)
答案 4 :(得分:0)
我遇到了同样的问题。我刚刚在选项标签中添加了一个click事件,并更改了select:
的值$("#select option").mouseup(function() {
$(this).parent().val($(this).attr("value"));
// do something.
});
注意:这不适用于iPhone或iPad设备。