Wie greifen keyboard-events an ein element, das nicht akzeptieren zu konzentrieren?
Ich weiß, dass für die Handhabung von Tastatur-events in einem input-Feld können Sie verwenden:
$('input').keyup(function(e){
var code = e.keyCode //and 13 is the keyCode for Enter
});
Aber, nun, ich habe einige div
und li
Elemente, und ich habe nicht ein form
element, und keines meiner Elemente berücksichtigt werden, die Elemente bilden, und keiner von Ihnen akzeptieren Fokus oder Registerkarte und so ein Zeug.
Aber jetzt habe ich behandeln müssen, die keyup
(oder keydown
oder keypress
spielt keine Rolle) - Ereignis in ein div-element. Ich habe versucht:
$('div#modal').keyup(function(e){
if (e.keyCode == 13)
{
$('#next').click(); //Mimicking mouse click to go to the next level.
}
});
Aber das problem ist, es funktioniert nicht.
Was soll ich tun?
InformationsquelleAutor der Frage Saeed Neamati | 2011-07-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen
div
standardmäßig kann nicht gegeben werden, konzentrieren. Sie können jedoch ändern, indem Sie hinzufügen einertabindex
Attribut derdiv
:Können Sie dann geben Sie die
div
Fokus, und auch verwischen mit denhover
Veranstaltung:Wenn die
div
Fokus hat, wird es akzeptieren Tastatur-Ereignisse. Sie können sehen, ein Beispiel für diese Arbeit hier.InformationsquelleAutor der Antwort James Allardice
Ich bin zu spät, aber der richtige Weg, um sicherzustellen, dass die richtige Veranstaltung jetzt Feuer wird durch die Verwendung der neuen HTML5 Attribut "contenteditable":
classic Js-Mechaniker kann dann angewendet werden:
InformationsquelleAutor der Antwort Smithfield
Interessante Frage. (Hier ein anderes für Sie, zu wissen wie das div-Element den Fokus hat?)
Wie kann ich sehen, dein div wird ein popup (seine id ist
dialog
).Hier haben Sie einen workaround:
Auf popup öffnen:
Auf poup schließen:
Dann die Bindung:
Diese Weise sind wir nachahmende keyup-event auf dem div.
Hoffe, das hilft. Cheers
PS: Beachten Sie, dass Sie
#dialog
stattdiv#dialog
InformationsquelleAutor der Antwort Edgar Villegas Alvarado