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 打开下拉菜单时事件不会触发。
我试图阻止退格按钮在每个浏览器中返回一页。现在我正在使用这个代码:
$(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 打开下拉菜单时事件不会触发。