jquery select下拉列表在's已打开

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

本文关键字:select 下拉列表 jquery      更新时间:2023-09-26

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

$(document).on("keydown", function (e) {
    if (e.which === 8 && !$(e.target).is("input, textarea")) {
        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事件不会触发。

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

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

如果添加,您现在必须检查$(select)上的keydown事件

console.log(e.which)
console.log(e.target)

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

这将用于您的

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