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

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

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

除了打开选择字段下拉列表时,它才能正常工作,此事件将被忽略,退格区无论如何都会返回一页。 我怎么解决这个问题? 谢谢您的回答。

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

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

您可以将下拉列表的大小更改为打开时显示,如下所示: https : //jsfiddle.net/yzr2cmqv/

 
$(".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标记添加到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(); } });