Jquery mobile 使用jQueryMobile在BlackBerry中捕获退格按键

Jquery mobile 使用jQueryMobile在BlackBerry中捕获退格按键,jquery-mobile,blackberry,keyevent,blackberry-simulator,jquery-events,Jquery Mobile,Blackberry,Keyevent,Blackberry Simulator,Jquery Events,有没有办法在BlackBerry中捕获输入[type=“text”]上的退格键?我试过使用$('input[type=“text”]”)。bind('keydown',function(event){…})并捕获除退格(del)事件外的所有按键事件。按下此键不会触发任何按键事件 有人知道捕捉事件的方法吗 我正在为OS 6.0开发,并使用黑莓模拟器9800进行测试 已编辑-我正在测试的代码 <div id="myPage" data-role="page" data-theme="b">

有没有办法在BlackBerry中捕获
输入[type=“text”]
上的退格键?我试过使用
$('input[type=“text”]”)。bind('keydown',function(event){…})
并捕获除退格(del)事件外的所有按键事件。按下此键不会触发任何按键事件

有人知道捕捉事件的方法吗

我正在为OS 6.0开发,并使用黑莓模拟器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>

$('input[type=“text”]”)。绑定('keydown',函数(e){
如果(e.keyCode==8)
警报('退格被捕获')
});

以下代码可以正常工作。你可以在电视上看到它。在铬上测试

$(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')
            });
        }

您可以使用此项查看要返回的密钥码。
在BlackBerry 9900 7.1上,我获得了密钥码8。

在普通浏览器中无法实现这一点。

使用JavaScript跟踪back key事件的唯一方法是使用 使用
API的小部件/WebWorks应用程序


我刚刚遇到了这个麻烦,在寻找答案的过程中发现了这个问题,下面是我的调查和解决方案的细节(嗯,解决方法)

按下backspace键时,Blackberry浏览器中的
input
textarea
元素将不会触发
keyup
keydown
事件。但是,当事件处理程序绑定到
文档时将触发它:

$("#myInput").keydown(someFn); //Will not fire for backspace
$(document).keyup(someFn); //Will fire for backspace
为什么会这样,我完全不知道。
keyup
事件应该会冒泡,它确实会冒泡,但因为当您按下backspace键时它甚至不会触发,所以没有多大用处

然而,还有另一件事我们可以处理。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);
一些注意事项:

  • 据我所知,这只是Blackberry 6浏览器中的一个问题。我已经测试了Blackberry 5(物理设备和模拟器)和7(模拟器),它们都会为退格键触发
    keydown
    keydup
    事件

  • 除了Opera Mobile(在第12版中测试过)之外,我测试过的几乎每一款浏览器都可以使用此“修复程序”(这样你就可以在不破坏其他浏览器的情况下使用它来正确支持Blackberry 6),Opera Mobile出于某种原因有时会触发两次
    input
    事件

  • 这仅允许您在输入中有文本要删除时检测退格按下(否则,
    input
    事件不会触发)。这可能是剧本最大的失败

  • 您可以找到一个有效的示例,但对于移动设备测试,加载该示例会更快


它不起作用。我已经测试过了。不
keypress
keyup
keydown
捕获在BlackBerry simulator 9800中按下退格键的事件。我已经更新了代码,并在JSFIDLE上共享了一个演示,如果它也不起作用,请共享我可以看到的更多代码。正如您所解释的,它在Chrome上工作,但不幸的是,它不能在BlackBerry模拟器上工作(我从BlackBerry浏览器打开了指向JSFIDLE的链接,但它没有捕获退格键)。我尝试了一个非常简单的页面,就像你的一样。我已经编辑了添加代码的问题。不管你是否在Chrome上测试过它,它都应该在BlackBerry OS6上工作!感谢您的帮助,但这似乎只适用于WebWorks应用程序,而我的情况并非如此。当我包含代码时,它似乎无法识别
blackberry
Javascript变量。除此之外,没有KEY_BACKSPACE或KEY_DEL(只有KEY_BACK),因此我认为它没有映射。这个答案可能是你想要的:谢谢你的链接,但我想要的是使用Javascript捕获事件,因为我没有为Blackberry编写本机应用程序。在我的情况下,按backspace键不会触发任何事件(不是
keypress
,也不是
keydown
keyup
)。谢谢,但正如我在第一个回答中回答的,我没有开发WebWorks应用程序,除此之外,backspace键似乎没有映射。我测试了你的代码,但不幸的是,与code aDDict回答中的第一个代码一样,按backspace键不会触发任何键事件,就像其他键一样。当我按下那个键时,没有代码被打印出来。只有黑莓6似乎有这个问题。我在5号、6号和7号进行了测试。请看我的答案,这是一个非常有趣的解决方法。我以前不知道
input
事件。非常感谢您如此详细的回答!:-)@巴勃罗-不客气:)我在黑莓手机上为这个问题挣扎了两天。当我有时间尝试解决输入为空时按backspace不会触发事件的问题时,我将继续使用它,但就我目前的目的而言,所描述的解决方法已经足够了。