14

我正在使用 jquery 和 livequery 插件收听选择下拉菜单的更改事件。

$(".myDropdown").livequery("change", function () {
});

我注意到的一件事(我正在使用 Firefox)是

当我选择焦点时,事件处理程序不会因点击向上和向下箭头而触发(向上和向下箭头会更改条目)

为什么当我上下移动箭头键时不会触发更改事件,是否有建议或解决方法?

4

4 回答 4

5

如果马伏里奥说的是真的,那应该管用

$(".myDropdown").livequery("change", function () {
   // your event handler
}).livequery("keypress", function() { 
   $(this).trigger("change");
});

http://jsfiddle.net/tW6Su/2/作为证明

于 2012-04-29T11:29:11.230 回答
2

我想我会总结一下。

如果您单击选择框中的某个项目,则您正在更改它。如果您通过键向下通过选择框,直到您按下回车键才会被选中,单击关闭或 Tab 键离开。我想这从浏览器到浏览器略有不同,但基本上选择发生在“我完全完成了这个表单字段并现在离开”事件之类的事情上。

如果您希望结果更直接,您可以像这样触发更改事件:

$("select").live("keypress",function(){
    $(this).trigger("change");
});

如果您希望在所有表单字段上都发生这种情况,请尝试使用此选择器:$(":input select textarea")

于 2012-05-05T02:28:02.910 回答
1

以下代码(无论如何在 Firefox 3.6 上)同意 OP 并且不同意评论者:

$('body').append('<select/>').find('select')
    .append('<option>one</option)')
    .append('<option>two</option>')
$('body').find('select').keypress(function() { 
    console.log('keypress: ' + $(this).val()); })

每当您按箭头键时,都会将更改的值打印到日志中。

于 2011-09-16T23:35:17.053 回答
0

在元素失去焦点之前不会触发更改事件,即使您正在更改值(正如 Malvolio 所证明的那样)。以下代码片段将在按下任意键时手动触发更改事件:

$("select").on("keypress",function(){
    $(this).trigger("change");
});
于 2012-05-05T02:39:38.837 回答