jQueryListbox更改事件不会在键盘滚动中触发

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (35)

我在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);

扫码关注云+社区

领取腾讯云代金券