有没有办法捕获 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>
最佳答案
我刚刚遇到了这种烦恼,并在寻找答案时发现了这个问题,所以这里是我的调查和解决方案的详细信息(嗯,解决方法)。
当按下退格键时,黑莓浏览器中的 keyup
或 keydown
元素将不会触发 input
和 textarea
事件。但是,当事件处理程序绑定(bind)到 document
时,它将被触发:
$("#myInput").keydown(someFn); //Will not fire for backspace
$(document).keyup(someFn); //Will fire for backspace
为什么会这样,我完全不知道。
keyup
事件应该冒泡,确实如此,但由于按下退格键时它甚至不会触发,所以没有多大用处。但是,我们还有另一个事件可供使用。黑莓浏览器支持
input
事件,并在元素值发生变化时正确触发(幸运的是,当该变化是由于按下退格键时)。因此,我们可以通过将事件处理程序绑定(bind)到
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);
一些注意事项:
keydown
和 keyup
事件。 input
事件有时会发生两次。 input
事件)。这可能是剧本最大的败笔。 关于jquery-mobile - 使用 jQueryMobile 在 BlackBerry 中捕获退格键按下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10648700/