jquery select dropdown在打开时会忽略keydown事件?

时间:2015-07-01 07:45:17

标签: javascript jquery html preventdefault backspace

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

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

除了打开选择字段下拉列表 之外,它对所有内容都可以正常工作,此事件将被忽略,反向空间无论如何都会返回一页。我怎么解决这个问题?谢谢你的回答。

3 个答案:

答案 0 :(得分:2)

仅供参考,因为您的代码在IE和FF中正常运行,因此这是Google Chrome特有的。

如果你真的需要这个工作,你可以渲染一个假的下拉菜单,而不是以程序方式设置选择。

您可以将下拉列表的大小更改为打开时显示,如下所示: 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事件不会被触发。

答案 1 :(得分:-2)

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

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

答案 2 :(得分:-2)

如果你添加

,你现在必须立即在$(选择)上检查keydown事件
console.log(e.which)
console.log(e.target)

您会注意到,当您选择下拉列表处于活动状态时单击并按下键盘时,您将无法获得keydown事件。

这将为您的

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