有没有办法在BlackBerry中的input[type="text"]
上捕获退格键?我尝试过使用$('input[type="text"]').bind('keydown', function(event) { ... });
并捕获除退格(del)之外的所有按键事件。按此键不会触发任何键事件。
有没有人知道捕捉事件的方法?
我正在开发OS 6.0并使用BlackBerry模拟器9800进行测试。
已编辑 - 我正在测试的代码
<div id="myPage" data-role="page" data-theme="b">
<div data-role="content">
<input type="text" id="ddd" />
</div>
<script type="text/javascript">
$('input[type="text"]').bind('keydown', function(e){
if(e.keyCode == 8)
alert('backspace trapped')
});
</script>
</div>
答案 0 :(得分:6)
我刚刚反对这种烦恼,并在寻找答案时发现了这个问题,所以这里有我的调查和解决方案的细节(好的,解决方法)。
按下退格键时,不会在Blackberry浏览器中的keyup
或keydown
元素上触发input
和textarea
事件。但是, 会在事件处理程序绑定到document
时触发:
$("#myInput").keydown(someFn); //Will not fire for backspace
$(document).keyup(someFn); //Will fire for backspace
为什么会这样,我完全不知道。 keyup
事件应该冒泡,但确实如此,但是当你按下退格键时它甚至不会触发,这没什么用。
但是,还有另一个事件可供我们使用。 Blackberry浏览器支持input
事件,并且只要元素的值发生变化,就会正确触发(包括,幸运的是,当这个更改是由于按下退格键时)。
因此,我们可以通过将事件处理程序绑定到keydown
和input
来解决问题。 keydown
事件将在input
之前触发,除非按下退格键,在这种情况下keydown
将不会触发。所以我们可以很容易地跟踪它:
function handler(e) {
if (e.keyCode === 8) {
alert("Backspace!"); //Backspace was pressed :)
}
}
var elem = document.getElementById("example");
elem.addEventListener("keydown", function (e) { //Bind to keydown event
this.keydownFired = true; //Remember that keydown fired in expando property
handler.call(this, e); //Call the event handler
}, false)
elem.addEventListener("input", function (e) { //Bind to input event
if (!this.keydownFired) { //Keydown didn't fire, must have pressed backspace
e.keyCode = 8; //Fix the event object
handler.call(this, e); //Call the event handler
}
delete this.keydownFired; //Clean up so we can handle next key press
}, false);
一些注意事项:
据我所知,这只是Blackberry 6浏览器中的一个问题。我测试了Blackberry 5(物理设备和模拟器)和7(模拟器),两者都将触发{{1}退格键的事件和keydown
事件。
这个“修复”几乎适用于我测试过的每一个浏览器(所以你可以使用它来正确支持Blackberry 6而不会破坏其他浏览器),除了Opera Mobile(在12版中测试),对于某些浏览器理由喜欢有时两次发起keyup
事件。
这只允许您在要删除的输入中有文本时检测退格键(否则input
事件不会触发)。这可能是该剧本最大的垮台。
您可以找到一个有效的示例here,但对于移动设备测试,可以更快地加载embedded version。
答案 1 :(得分:4)
以下代码,工作正常。你可以在jsfiddle上看到它。在chrome上测试它
$(document).ready(function() {
$('input[type="text"]').bind('keydown', function(e){
if(e.keyCode == 8)
alert('backspace trapped')
});
});
用于黑莓手机
function captureBackButton() {
blackberry.system.event.onHardwareKey(blackberry.system.event.KEY_BACK,
function() {
alert('Backspace Pressed')
});
}
答案 2 :(得分:1)
您可以使用此http://jsbin.com/ezucen/13/查看 取回的密钥代码。 在BlackBerry 9900 7.1上,我收到了keyCode 8。
答案 3 :(得分:1)
无法在常规浏览器中完成此操作。
使用JavaScript跟踪后退键事件的唯一方法是使用a 使用
KEY_BACK
API的小部件/ WebWorks应用程序。