键盘滚动时不会触发Jquery列表框更改事件

我在HTML表单上有一个简单的Listbox和这个非常基本的jQuery代码

//Toggle visibility of selected item $("#selCategory").change(function() { $(".prashQs").addClass("hide"); var cat = $("#selCategory :selected").attr("id"); cat = cat.substr(1); $("#d" + cat).removeClass("hide"); }); 

当使用鼠标选择当前项目时,更改事件会激活,但是当我使用键盘滚动项目时,事件不会被触发,我的代码也不会执行。

这种行为有原因吗? 什么是解决方法?

在元素失去焦点之前,通常不会触发onchange事件。 你也想使用onkeypress 。 也许是这样的:

 var changeHandler = function() { $(".prashQs").addClass("hide"); var cat = $("#selCategory :selected").attr("id"); cat = cat.substr(1); $("#d" + cat).removeClass("hide"); } $("#selCategory").change(changeHandler).keypress(changeHandler); 

你需要onchangeonkeypress分别考虑鼠标和键盘交互。

有时,每个浏览器的更改行为可能会有所不同,因为您可以执行以下操作:

  //Toggle visibility of selected item $("#selCategory").change(function() { $(".prashQs").addClass("hide"); var cat = $("#selCategory :selected").attr("id"); cat = cat.substr(1); $("#d" + cat).removeClass("hide"); }).keypress(function() { $(this).change(); }); 

您可以链接所需的任何事件并手动触发更改事件。

IE:

 var changeMethod = function() { $(this).change(); }; ....keypress(changeMethod).click(changeMethod).xxx(changeMethod); 

您描述的行为,即在select元素中通过键盘滚动触发的更改事件,实际上是Internet Explorer错误。 DOM Level 2 Event规范将change事件定义为:

当控件失去输入焦点并且自获得焦点后其值已被修改时,会发生更改事件。 此事件对INPUT,SELECT和TEXTAREA有效。 元件。

如果你真的想要这种行为,我认为你应该看一下键盘事件。

 $("#selCategory").keypress(function (e) { var keyCode = e.keyCode || e.which; if (keyCode == 38 || keyCode == 40) { // if up or down key is pressed $(this).change(); // trigger the change event } }); 

点击这里查看示例……

我在JQuery 1.4.1下遇到了IE的问题 – 如果使用键盘进行更改,combobox上的更改事件不会触发。

似乎已在JQuery 1.4.2中修复。

 $('#item').live('change keypress', function() { /* code */ });