【问题标题】:event.which and event.keycode is not working on internet explorer 10 for backspace buttonevent.which 和 event.keycode 在 Internet Explorer 10 上无法用于退格按钮
【发布时间】:2014-07-30 22:12:37
【问题描述】:
我必须用JavaScript 跟踪alphabet keys 和backspace key。
我正在使用下面的书面代码来跟踪每个按键,但不幸的是,当我在 IE 中按 backspace button 时,我对这个问题一无所知。
$('#crossword').delegate('.grid_input_holder','keypress',function(event){
alert('keycode : '+event.keycode+' which : '+$(this).val( String.fromCharCode(event.which));
});
提前致谢
【问题讨论】:
标签:
javascript
jquery
internet-explorer
【解决方案1】:
如果你想支持 IE 并使用特殊键(如 delete 和 backspace),我建议改用 keydown/keyup。
特殊键
Explorer 不会触发按键
删除、结束、进入、转义的事件,
功能键,主页,插入,
pageUp/Down 和 tab。
如果您需要检测这些键,请帮自己一个忙,搜索它们的 keyCode onkeydown/up,同时忽略 onkeypress 和 charCode。
您可以阅读更多关于Detecting keystrokes(Quirksmode)的跨浏览器问题。
或
如果我们在文本框中已经有几个字符,则 Backspace 的键代码将采用值 = 83 。
如果文本框中没有字符并且我们正在尝试按退格键,则密钥代码将为 = 8 。
【解决方案2】:
如果你想支持 IE 并使用特殊键(如 delete 和 backspace),我建议改用 keydown/keyup。
【解决方案3】:
使用 IE10 时会出现问题。因为在 IE 版本
event.which == undefined || event.which == zero
当按下特殊处理键时,如 Backspace、DEL、INS、HOME、导航键、Enter 等。
因此我们可以很容易地识别何时按下了特殊处理字符并可以单独处理。
但在 IE10 中。 event.which 不为特殊处理键提供 undefined 或零,而是提供 keycode....
令人惊讶的是,它为 Dot( . ) 和 Delete 、 Single quote( ' ) 和 Right arrow 等提供了相同的键代码。
因此,当使用 nother 按下特殊处理键时,我们无法在 IE10 中准确识别
event.which 也不是 event.keycode .
在这种情况下...使用
event.charCode == 0
用于识别IE10
中的特殊处理字符
相信我的朋友们,它为我节省了一个多星期的时间。