2011-01-05 13 views
1

Warum funktioniert das nicht?jquery: keydown, keyup, kleiner snippet, warum funktioniert das nicht?

var holdingctrl = false; 
$(document).keydown("q",function(e) { 
if(holdingctrl == true) 
alert("Holding CTRL and pressing Q: Success."); 
e.preventDefault(); 
}); 

$(document).keyup("q",function(e) { 
holdingctrl == false 
}); 

Dieses Beispiel funktioniert gut, aber was mache ich oben falsch?

$(document).keyup("q",function(e) { 
alert("ONLY pressing Q: Success."); 
}); 
+0

Sie vielleicht einen Blick hier haben wollen: http://www.gmarwaha.com/blog/2009/06/16/ctrl-key-combination-simple-jquery-plugin/ –

+0

Wenn Sie mit Schlüsselereignissen arbeiten, verwenden Sie console.log für Debugging-Informationen oder Sie verlieren die Status-Ness. –

Antwort

2

Sie benötigt eine Möglichkeit, die Kontrolle zu bestimmen, ob zur Zeit gedrückt wurde (e.ctrlKey) - Dies sollte für Sie arbeiten:

$(document).keyup(function(e) 
    { 
     if (e.ctrlKey && e.keyCode == 81) 
     { 
      alert("CTRL+Q Pressed"); 
     } 
    }); 

Working Demo here

+0

hat wunderbar funktioniert. –

+0

eigentlich, es feuert auch, wenn ich STRG halte und A drücke .... hmm ... komisch .... und ich habe gerade gemerkt, dass das Drücken einiger anderer Tasten bei gedrückter Strg-Taste auch zum Feuern führt. –

+0

Es sollte jetzt behoben werden - aktualisierte auch die Demo. –

1

Ich bin nicht ganz sicher, was Sie versuchen, mit diesem Code-Schnipsel zu tun, aber Sie können prüfen, ob ctrl mithilfe der event.ctrlKey Eigenschaft gedrückt wird:

$(document).keydown(function(e) { 
    if (e.ctrlKey && (e.keyCode == 81)) { // ctrl + q 
     alert("Pressing Q and ctrl: Success."); 
    } 
}); 
+0

aus irgendeinem Grund, dies bewirkt, dass die Warnung ausgelöst wird, wenn Sie nur Strg drücken, nicht einmal Q drücken. Ich denke, es ist die "Keydown"? weil das Ändern in keyup das Problem behebt. –

+0

@android Ich habe die Antwort geändert, um 'e.keycode' zu ​​verwenden, der prüft, ob die gedrückte Taste' q' ist. – lonesomeday

1

Hängt davon ab, was Sie erreichen möchten.

Paar Hinweise:

  • die Ereignisdaten Sie vorbei sollte ein Objekt statt ein einzelnes Zeichen sein.
  • der keyup Handler macht nichts mit dem == Vergleich. Sie wollten wahrscheinlich eine = Zuweisung verwenden.

$(document).keyup({ theChar:"q" }, function(e) { 
    holdingctrl = false; 
}); 
+0

Ich habe den {theChar: "q"} -Teil Ihres Codes auf die Antwort direkt über Ihnen angewendet und er wird ausgelöst, wenn ich STRG + Q drücke, aber auch wenn ich STRG + A und STRG + viele andere Tasten drücke, wie P, etc. –