基本上,我有如下所示的下拉菜单:
<select>
<option>0</option>
<option selected="selected">1</option>
<option>2</option>
<option>3</option>
</select>
我正在尝试编写一个即使在您选择相同选项时也会触发的函数,即即使打开下拉列表并重新选择所选选项,我也希望它执行该函数。
基本上,我有如下所示的下拉菜单:
<select>
<option>0</option>
<option selected="selected">1</option>
<option>2</option>
<option>3</option>
</select>
我正在尝试编写一个即使在您选择相同选项时也会触发的函数,即即使打开下拉列表并重新选择所选选项,我也希望它执行该函数。
如果您的意思是用鼠标选择,则可以使用mouseup
. 但是,它也会在打开选择框时触发,因此您需要跟踪触发的次数(偶数:选择正在打开,奇数:选择正在关闭):http:/ /jsfiddle.net/T4yUm/2/。
$("select").mouseup(function() {
var open = $(this).data("isopen");
if(open) {
alert(1);
}
$(this).data("isopen", !open);
});
pimvdb 的回答对我有很大帮助,但我添加了一些额外的位来处理键盘激活和远离选择的导航:
$('select').mouseup(... as in pimvdb... )
.blur(function() {
$(this).data('isopen', false);
}).keyup(function(ev) {
if (ev.keyCode == 13)
alert(1);
});
当下拉菜单打开时,模糊处理程序处理从选择导航离开,当您使用键盘更改选择的值时,keyup 处理程序处理。然后行为是当用户单击返回导航离开时,才认为用户最终选择了该值。如果您想要键盘的不同行为,那应该不难做到。
select
不打算以这种方式使用 - 在大多数情况下,您可以使用一些技巧来获得这种行为,例如在 上跟踪鼠标和键盘事件select
,但不能保证它们会继续工作,或在每个平台上工作.
我建议要么...
select
在更改时将重置为其默认值,并使用其他一些文本来指示哪个被“选中”,或select
.以外的控件。你能更详细地描述一下最终目标吗?
我遇到了同样的问题。我刚刚在选项标签中添加了一个点击事件并更改了选择的值:
$("#select option").mouseup(function() {
$(this).parent().val($(this).attr("value"));
// do something.
});
注意:这不适用于 iPhone 或 iPad 设备。