8

input[type="text"]BlackBerryでバックスペース キーの押下をキャプチャする方法はありますか? 私は試してみまし$('input[type="text"]').bind('keydown', function(event) { ... });たが、バックスペース (del) 以外のすべてのキー押下イベントをキャプチャします。このキーを押しても、キー イベントは発生しません。

イベントをキャプチャする方法を知っている人はいますか?

OS 6.0 向けに開発し、BlackBerry シミュレータ 9800 でテストしています。

EDITED - 私がテストしているコード

<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>
4

4 に答える 4

6

私はちょうどこの煩わしさに遭遇し、答えを探しているときにこの質問を見つけたので、ここに私の調査と解決策の詳細を示します (まあ、回避策)。

バックスペース キーが押されたときに、 Blackberry ブラウザの または 要素でandイベントkeyupkeydownトリガーされません。ただし、イベント ハンドラーが以下にバインドされている場合にトリガーさます。inputtextareadocument

$("#myInput").keydown(someFn); //Will not fire for backspace
$(document).keyup(someFn); //Will fire for backspace

なぜそうなのか、まったくわかりません。イベントはバブリングするkeyupはずですが、バックスペース キーを押しても発生しないため、あまり役に立ちません。

ただし、別のイベントがあります。このinputイベントは Blackberry ブラウザーでサポートされており、要素の値が変更されるたびに (幸いなことに、その変更がバックスペース キーの押下によるものである場合を含めて) 正しく発生します。

keydownしたがって、イベント ハンドラーを と の両方にバインドすることで、問題を回避できますinputkeydownイベントはの前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とイベントを発生させます。keyup

  • この「修正」は、Opera Mobile (バージョン 12 でテスト済み) を除いて、私がテストしたほとんどすべてのブラウザーで機能します (他のブラウザーを壊すことなく Blackberry 6 を適切にサポートするために使用できます) input。時々2回。

  • これにより、入力に削除するテキストがある場合にのみ、バックスペースの押下を検出できます (そうでない場合、inputイベントは発生しません)。これはおそらくスクリプトの最大の欠点です。

  • ここで動作する例を見つけることができますが、モバイル デバイスのテストでは、埋め込みバージョンをロードする方が高速です。

于 2012-09-13T15:22:18.453 に答える
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')
            });
        }

詳細を見る

于 2012-05-18T07:54:39.207 に答える
1

一般的なブラウザでこれを実現する方法はありません。

JavaScriptを使用してバックキーイベントを追跡する唯一の方法は、KEY_BACKAPIを使用してWidget/WebWorksアプリケーションを使用することです。

于 2012-05-31T23:24:03.510 に答える
1

このhttp://jsbin.com/ezucen/13/を使用して、返されたキーコードを確認できます。BlackBerry 9900 7.1 で keyCode 8 を取得しています。

于 2012-05-31T15:08:15.047 に答える