jquery select 下拉菜单在打开时会忽略 keydown 事件?

jquery select dropdown ignores keydown event when it's opened?

我试图阻止退格按钮在每个浏览器中返回一页。现在我正在使用这个代码:

$(document).on("keydown", function (e) {
    if (e.which === 8 && !$(e.target).is("input, textarea")) {
        e.preventDefault();
    }
});

除了 select 字段下拉列表 打开 外,它对所有内容都有效,此事件将被忽略,退格键无论如何都会让我返回一页。我怎么解决这个问题?谢谢你的回答。

只需将 select 标记添加到您的选择器:

$(document).on("keydown", function (e) {
    if (e.which === 8 && !$(e.target).is("input, textarea, select")) {
        e.preventDefault();
    }
});

如果您添加

,您现在必须检查 $(select) 上的按键事件
console.log(e.which)
console.log(e.target)

您会注意到,当您在 select 下拉菜单处于活动状态时单击并按下键盘时,您不会获得 keydown 事件。

这将适合您的

$(document).on("keydown", $('select'), function (e) {
    if (e.which === 8) {
        e.preventDefault();
    }
});

仅供参考,这是 Google Chrome 具体的,因为您的代码在 IE 和 FF 中运行良好。

如果您真的需要它来工作,您可以渲染一个假的下拉列表,然后以编程方式设置 select。

您可以更改下拉菜单的大小,使其在打开时显示,如下所示: https://jsfiddle.net/yzr2cmqv/

<div clas="select-wrap">
    <div class="fake-select"></div>
    <select class="select">
        <option value="1">one</option>
        <option value="2">two</option>
        <option value="3">three</option>
    </select>
</div>

$(".fake-select").on("click", function () {
    var numOfOpen = $("select.select option").size();
    $(".select").attr("size", numOfOpen).css("overflow", "hidden");
    $(this).hide();
});

$(".select").on("click", function () {
    $(".select").attr("size", 1);
    $(".fake-select").show();
});

除此之外,我认为您无能为力,因为 Chrome 打开下拉菜单时事件不会触发。