8

Gibt es eine Möglichkeit, Backspace-Taste drücken Sie auf eine in BlackBerry zu erfassen? Ich habe versucht mit $('input[type="text"]').bind('keydown', function(event) { ... }); und es erfasst alle wichtigen Presseereignisse mit Ausnahme der für die Rücktaste (Del). Durch Drücken dieser Taste wird kein Schlüsselereignis ausgelöst.Capture Backspace-Taste drücken Sie in BlackBerry mit jQueryMobile

Kennt jemand eine Möglichkeit, das Ereignis zu erfassen?

Ich entwickle für OS 6.0 und Testen mit Blackberry-Simulator 9800.

EDITED - den Code, ich bin Testen

<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

Diese Antwort vielleicht, was Sie wollen: http://stackoverflow.com/questions/942037/how-do-i-detect-the-delete-key-in-my-field-subclass – Kannika

+0

Vielen Dank für den Link, aber ich möchte das Ereignis mit Javascript erfassen, da ich keine native Anwendung für Blackberry programmiere. In meinem Fall wird durch Drücken der Rücktaste kein Ereignis ausgelöst (nicht 'keypress', weder' keydown' noch 'keyup'). – Pablo

Antwort

6

Ich bin gerade auf diese Belästigung gestoßen und habe diese Frage bei meiner Suche nach Antworten gefunden, also hier sind Details meiner Untersuchung und Lösung (gut, Workaround).

Die keyup und keydown Ereignisse einfach nicht auf input oder textarea Elemente in dem Blackberry-Browser, wenn die Taste gedrückt wird, die Rück ausgelöst werden. Es wird jedoch ausgelöst werden, wenn der Event-Handler an die document gebunden ist:

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

Warum dies der Fall ist, ich habe absolut keine Ahnung. Das Ereignis keyup sollte sprudeln, und das tut es, aber da es nicht einmal feuert, wenn Sie die Rücktaste drücken, ist das nicht viel sinnvoll.

Allerdings gibt es noch ein weiteres Ereignis. Das Ereignis input wird vom Blackberry-Browser unterstützt und wird korrekt ausgelöst, wenn sich der Wert des Elements ändert (einschließlich glücklicherweise für uns, wenn diese Änderung auf ein Drücken der Rücktaste zurückzuführen ist).

Daher können wir das Problem umgehen, indem wir Event-Handler sowohl an keydown als auch an input binden. Das Ereignis keydown wird vor input ausgelöst, außer wenn die Rücktaste gedrückt wird. In diesem Fall wird keydown nicht ausgelöst.So können wir verfolgen, dass halten ganz einfach:

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); 

Einige Anmerkungen:

  • Soweit ich das sagen kann, ist nur ein Problem im Browser auf Blackberry 6 ich getestet habe Blackberry 5 (physisches Gerät und Simulator) und 7 (Simulator) und beide feuern die Ereignisse keydown und keyup für die Rücktaste ab.

  • Diese „fix“ funktioniert fast in jeden einzelnen Browser ich es getestet habe (so können Sie es verwenden, um richtig Blackberry 6, ohne zu brechen anderen Browser) außer Opera Mobile (getestet in Version 12), die aus irgendeinem Grunde mag das input Ereignis manchmal zweimal abfeuern.

  • Damit können Sie nur die Rücktaste drücken, wenn sich Text in der zu löschenden Eingabe befindet (andernfalls wird das Ereignis input nicht ausgelöst). Dies ist wahrscheinlich der größte Fehler des Skripts.

  • Sie können ein funktionierendes Beispiel here finden, aber für das Testen von mobilen Geräten ist es schneller, das embedded version zu laden.

+0

Eine sehr interessante Problemumgehung. Ich wusste vorher noch nichts von Input. Vielen Dank für die ausführliche Antwort! :-) – Pablo

+0

@Pablo - Gern geschehen :) Ich habe mit diesem Problem auf Blackberry für den besten Teil von 2 Tagen gekämpft.Ich werde weiter damit herumspielen, wenn ich Zeit finde, das Problem zu lösen, dass das Drücken der Rücktaste, wenn die Eingabe leer ist, kein Ereignis auslöst, aber für meine aktuellen Zwecke war die beschriebene Problemumgehung ausreichend. –

4

den folgenden Code, funktioniert einwandfrei. Sie können es auf jsfiddle sehen. auf Chrom getestet

$(document).ready(function() { 
$('input[type="text"]').bind('keydown', function(e){ 
    if(e.keyCode == 8) 
     alert('backspace trapped') 
    }); 
    });​ 

für Blackberry Nutzung

function captureBackButton() { 
      blackberry.system.event.onHardwareKey(blackberry.system.event.KEY_BACK, 
      function() { 
      alert('Backspace Pressed') 
      }); 
     } 

see detail

+0

Es funktioniert nicht. Ich habe es bereits getestet. Nicht 'keypress', noch' keyup' oder 'keydown' erfassen das Ereignis des Drückens der Rücktaste im BlackBerry Simulator 9800. – Pablo

+0

Ich habe den Code aktualisiert, und habe auch eine Demo auf jsfiddle geteilt, falls es auch nicht funktioniert, share mehr von deinem Code, den ich sehen kann. – Rab

+1

Es funktioniert wie beschrieben in Chrome, aber leider funktioniert es nicht auf dem BlackBerry-Simulator (Ich habe den Link zu jsfiddle vom BlackBerry-Browser geöffnet und es erfasst nicht die Rücktaste drücken). Ich habe es mit einer sehr einfachen Seite versucht, die deiner ähnlich ist. Ich habe die Frage bearbeitet und den Code hinzugefügt. – Pablo

1

können Sie diese http://jsbin.com/ezucen/13/ verwenden, um zu sehen, was Sie Keycode zurück sind bekommen. Auf Blackberry 9900 7.1 Ich erhalte keyCode 8.

+0

Ich habe Ihren Code getestet, aber unglücklicherweise, wie beim ersten Code in der Antwort von CoDe aDDict, wird durch Drücken der Rücktaste kein Schlüsselereignis ausgelöst, wie dies bei anderen der Fall ist. Wenn ich diese Taste drücke, wird kein Code gedruckt. – Pablo

+0

Es ist nur Blackberry 6, die dieses Problem zu haben scheint. Ich habe auf 5, 6 und 7 getestet. Siehe meine Antwort für eine Problemumgehung. –

1

Es gibt keine Möglichkeit, dies im allgemeinen Browser zu erreichen.

Die einzige Möglichkeit, die Rücktaste Ereignis mit JavaScript zu verfolgen ist eine Widget/WebWorks Anwendung mit KEY_BACK API zu verwenden.

+0

Danke, aber wie ich in der ersten Antwort geantwortet habe, entwickle ich keine WebWorks-Anwendung und abgesehen davon, scheint der Backspace-Schlüssel nicht abgebildet zu sein. – Pablo