2015-07-01 37 views
5

我试图阻止退格键在每个浏览器中返回一页。现在我正在使用此代码:jquery select下拉菜单打开时会忽略keydown事件吗?

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

它工作正常的一切,当一个选择栏下拉列表打开除外,此事件被忽略和退格把我一个页面回反正。我怎么解决这个问题?谢谢您的回答。

回答

2

只为信息,这是谷歌Chrome浏览器的具体因为你的代码在IE和FF正常工作。

如果你真的需要这个工作,你可以渲染一个假的下拉,并设置编程选择。

您可以更改下拉列表的大小出现,因为它是开放的,是这样的: 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

看起来这是Chrome中的一个错误。我已经报道过。感谢您的帮助。 – Silko

+0

很酷的技术来改变'尺寸',虽然它不幸中断键盘导航... –

+1

你可以实现额外的事件在键上/下,重现相同的逻辑,像这样的思想somethink: https://jsfiddle.net/yzr2cmqv/15 / – Shark4109

-2

select标签只需添加到您的选择:

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

你不明白我的疑问。你做了什么让事情变得更糟。 select中的默认事件返回页面,如果我将其添加到建议的位置,则它在关闭下拉菜单时也不起作用。 – Silko

-2

你必须马上检查keydown事件上$(选择),如果添加

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

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

这将使你的

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

嗯,我注意到我的代码只有在选择处于活动状态时才起作用,而它是专注的,但它需要关闭。我意识到它不工作,而选择打开.. –

+0

我已经尝试过。它没有帮助。正如我所说的,我的代码在关闭下拉菜单时适用于选择。问题是何时打开下拉菜单。同样的问题在于你的建议。 – Silko

相关问题