jQuery.change()事件不会在键盘上的选择列表上触发:我如何覆盖它?

jQuery.change()事件不会在键盘上的选择列表上触发:我如何覆盖它?,jquery,Jquery,jQuery.change事件不会在用户第二次键入并按Enter键选择项目时触发。它确实是第一次开火 见: 如果您关注列表并键入AD并按Enter键,[编辑]将触发警报。但如果您随后键入AG并按Enter键,则不会发生任何事情。只有当您从列表中单击时,警报才会弹出 如果我想处理用户同时使用鼠标和键盘更改列表,该怎么办 我知道我可以使用.keypress来处理键盘事件,但让两段独立的代码同时执行相同的操作感觉很奇怪 是否有一个jQuery事件可以在鼠标和键盘发生更改时立即处理它们 谢谢 **更新*

jQuery.change事件不会在用户第二次键入并按Enter键选择项目时触发。它确实是第一次开火

见:

如果您关注列表并键入AD并按Enter键,[编辑]将触发警报。但如果您随后键入AG并按Enter键,则不会发生任何事情。只有当您从列表中单击时,警报才会弹出

如果我想处理用户同时使用鼠标和键盘更改列表,该怎么办

我知道我可以使用.keypress来处理键盘事件,但让两段独立的代码同时执行相同的操作感觉很奇怪

是否有一个jQuery事件可以在鼠标和键盘发生更改时立即处理它们

谢谢

**更新**

这可能会澄清我的问题:

按键后的更改可能会非常混乱-它只在用户按Enter键或单击其他键时发生,因此如果我正在进行客户端更改,用户可能会非常惊讶

我能想到的唯一解决方案是某种变量,比如用户刚刚按下按键,按键时设置为true,然后在下一次更改事件时重置为false,但感觉非常混乱。如果在用户重新聚焦之前,鼠标进行了更改,那么它也不会起作用。啊

您可以添加按键,让这两个函数调用另一个函数来执行实际操作。这样,复制就没有那么糟糕了。实际上,回车键在firefox中触发事件,这就是.change对文本输入的作用。你必须全神贯注,改变才能生效。这也记录在

更改Api文档如下所示:

…事件在以下情况下立即触发: 用户使用 鼠标,但对于其他元素类型 事件将推迟到 元素失去焦点

更新 您可以将按键和更改组合在一个实时功能中,如下所示

$('div').live({
  'change': function() {},
  'keypress': function() {}
})

我想我以前在使用IE所有版本时都见过这种情况。键盘上的更改事件只有在输入失去焦点时才会触发;绑定到多个事件是使处理程序按预期工作的唯一方法。通过将处理程序定义为全局函数,然后将其设置为多个事件的处理程序,可以消除一些冗余:

function change_handler()
{
    // ...stuff...
}

$(document).ready(function() {
    $('input.whatever').bind('change keypress other_event ...', change_handler);
});
不像我希望的那么干净,但也没那么糟糕,而且很有效

希望这有帮助

为keyup事件添加处理程序,而不是keypress!例如,如果您对按键和更改使用相同的处理程序,那么它在Firefox中就不能正常工作

$("select").bind('change keyup', select_handler);
和处理程序

function select_handler() {
    $(this).val();
};

更改功能将触发键盘输入:

谷歌浏览器21.0.1180.89米 Internet Explorer 9.9.8112.16421 但是,Firefox 10.0.7不适用 全部在Windows7专业版SP1上

添加:

$('select').keypress(function() {
  $(this).change();
});
对于$document.ready-function,如果对我来说是已解决的,则不会对其他浏览器中断它


尽管按键处理程序中有强制更改事件,更改事件仍然只会触发一次。

键入AD并按Enter键对我有效-使用Chrome v9.0。什么浏览器?实际上,您一次可以将该行为应用于多个事件:绑定“更改按键”,函数OOPS,比这更微妙,抱歉,编辑了问题-问题实际上发生在第二个键盘输入上。第一个功能如您所述。您需要有按键功能才能在所有浏览器中工作。按键不好,因为它不会拾取鼠标事件。我想要一个同时处理这两个事件。啊,好吧,但是我怎么能以同样的方式处理鼠标和键盘事件呢?@AP257您必须添加一个按键。你不能把零钱和按键放在一起。两者都有不同的用途。@AP257请参阅上面更新的代码。这就是如何将按键和更改绑定在一起function@AP257别忘了检查accept,如果它回答了你的问题。恐怕不行:我会让同一个函数执行两次,这是不理想的。我想要一个单独的事件来处理这两种情况。这可能是jQuery中根本不存在的。我认为我的解决方案是最可靠的,尽管您必须检查两个事件是否在某些操作上同时触发,这可能会导致重复。这将不起作用。你需要有一个按键功能,这样你就可以告诉它注意e.which=13或者当按下任何其他定义的键时。您也不需要$document。准备好了。这正是我需要的,谢谢。为了防止每次按下一个键时都运行代码,我会这样做:if$this.val=old_值{…},其中old_值是前一个值。因此,您只需在值更改时运行代码。我希望这是有意义的。从jQuery1.7开始,.on方法是将事件处理程序附加到文档的首选方法。所以更好的解决方案是:在'change keyup'上,函数{}
$('select').keypress(function() {
  $(this).change();
});