2012-04-08 8 views
2

Ok, also versuche ich ein konsolenähnliches Verhalten zu erreichen, und ich brauche, um die Ausführung zu unterbrechen, bis ein Ereignis ausgelöst wird, was ich genau benötigen, ist dieser:jQuery halt Ausführung, bis ein Ereignis ausgelöst wird

var evt = $("element").waitForKeyDown(); 

Diese hypothetische Funktion sollte die Ausführung anhalten, bis der Benutzer eine Taste auf dem Element "element" drückt, das als Textfeld angezeigt wird. Wenn der Benutzer dann eine beliebige Taste in diesem Textfeld drückt, sollte die Ausführung fortgesetzt werden und evt sollte die Informationen zu diesem Ereignis enthalten.

Ist dies in Javascript möglich? oder ein ähnliches Verhalten, das funktioniert.

Antwort

1

Ich fürchte, es gibt keine blockierenden Aktionen in Javascript, außer Alarm und Aufforderung. Der einzige Weg, dies zu tun ist (könnte falsch sein, obwohl):

var evt = $("element").on("click",function(){ 
    //Continue here 
}); 
+0

Die Sache ist, dass ich die Ausführung zu blockieren, weil das Verhalten, das ich hier erreichen will das gleiche ist, dass Alarm, bestätigt und prompt hat. Ich muss warten, bis der Benutzer einige Daten eingibt –

+1

Warum verarbeiten Sie nicht einfach die Daten in einer anonymen Funktion? Zum Beispiel - http://jsfiddle.net/zYej4/ –

0

nur das KeyDown-Ereignis verwenden. Es macht genau das, was Sie erreichen wollen: Führen Sie eine Aktion nur aus, wenn eine Taste gedrückt wurde.

6

Sie möchten nicht immer in JavaScript warten - es gibt nur einen Thread und Sie benötigen ihn für andere Ereignisse, die möglicherweise in andere Teile der Seite kommen.

Was Sie stattdessen tun möchten, ist, nehmen Sie alles, was nach dem Punkt, wo Sie warten möchten, geschehen soll, und verpacken Sie es in eine function(){}. (Diese Funktion ist eine „Fortsetzung“ genannt, und Sie werden dieses Muster stoßen überall in JavaScript und anderen stark asynchronen Umgebungen.)

Von dort werden Sie Ihre neue Funktion mit dem folgende jQuery registrieren:

Sie könnten keypress anstelle von Keydown verwenden, aber Tastendruck (fast paradoxerweise) bringt Sie nicht alle Tasten drücken, nur diejenigen, die sich in Text-Eingabe von irgendeiner Art.

+0

Die Sache ist, dass ich die Ausführung blockieren muss, weil das Verhalten, das ich hier erreichen möchte, dasselbe ist, das Alarm, Bestätigung und Aufforderung haben. Ich muss warten, bis der Benutzer einige Daten eingibt. –

+0

@ Andrés, wenn Sie sagen "Blockausführung", ich nehme an, Sie bedeuten, die Webseite für alle Benutzerinteraktion zu blockieren, bis das richtige Tastendruck-Ereignis ausgelöst hat, habe ich recht? – David

+0

Wenn ich Blockade meine, meine ich den gleichen Effekt, den Alert, Prompt und Confirm haben. Ich möchte mein Skript zu einem bestimmten Zeitpunkt anhalten und dann, wenn der Benutzer die Return-Taste in einem Textfeld drückt, etwas mit dem Inhalt dieses Textfelds machen –

Verwandte Themen