我在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");
});
当使用鼠标选择当前项目时,更改事件会激活,但是当我使用键盘滚动项目时,事件不会被触发,我的代码也不会执行。
这种行为有原因吗?什么是解决方法?
答案 0 :(得分:21)
在元素失去焦点之前,通常不会触发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);
您希望onchange
和onkeypress
分别考虑鼠标和键盘交互。
答案 1 :(得分:4)
有时,每个浏览器的更改行为可能会有所不同,因为您可以执行以下操作:
//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);
答案 2 :(得分:1)
您描述的行为,即在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
}
});
检查示例here ...
答案 3 :(得分:0)
我在JQuery 1.4.1下遇到了IE的问题 - 如果使用键盘进行更改,组合框上的更改事件没有触发。
似乎已在JQuery 1.4.2中修复。
答案 4 :(得分:0)
$('#item').live('change keypress', function() { /* code */ });