Pab*_*blo 8 blackberry keyevent blackberry-simulator jquery-mobile jquery-events
有没有办法input[type="text"]在BlackBerry中捕获退格键?我试过$('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>
Run Code Online (Sandbox Code Playgroud)
我刚刚遇到这种烦恼,并在我寻找答案时发现了这个问题,所以这里有我的调查和解决方案的细节(好吧,解决方法).
在keyup和keydown事件根本不会被触发input或者textarea在黑莓浏览器元素时按下退格键.但是,当事件处理程序绑定到以下时,它将被触发document:
$("#myInput").keydown(someFn); //Will not fire for backspace
$(document).keyup(someFn); //Will fire for backspace
Run Code Online (Sandbox Code Playgroud)
为什么会这样,我完全不知道.该keyup事件应该泡沫,确实如此,但因为当你按退格键,它甚至不火,那是没有多大用处.
但是,还有另一个事件可供我们使用.该input事件由Blackberry浏览器支持,并且在元素值发生变化时正确触发(包括,幸运的是,当这个更改是由于按下退格键时).
因此,我们可以通过将事件处理程序绑定到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);
Run Code Online (Sandbox Code Playgroud)
一些说明:
据我所知,这只是Blackberry 6浏览器中的一个问题.我测试了Blackberry 5(物理设备和模拟器)和7(模拟器),两者都将触发退格键的事件keydown和keyup事件.
这个"修复"几乎适用于我测试过的每一个浏览器(所以你可以使用它来正确支持Blackberry 6而不会破坏其他浏览器),除了Opera Mobile(在12版中测试),由于某些原因,它喜欢触发input事件有时两次.
这只允许您在要删除的输入中有文本时检测退格按(否则input事件不会触发).这可能是剧本最大的垮台.
| 归档时间: |
|
| 查看次数: |
5058 次 |
| 最近记录: |