2009-10-08 8 views
0

J'essaie d'utiliser la touche de pression de jQuery pour déclencher un clic sur une boîte de dialogue modale créée à l'aide de la fonction de boîte de dialogue jQuery. Le problème est, avec le code suivant, il fonctionne la première fois (en appuyant sur Entrée appuie sur le bouton Enregistrer) mais je reçois un comportement erratique lorsque je ferme le dialogue modal et le rouvrir. Je pense qu'une variante de $(this).("button:contains('Save')") fonctionnerait, mais cela ne fonctionne pas.Dialog keypress et DOM

$('#dialog').keypress(function(e) { 
     if (e.which == 13) { 
     $("button:contains('Save')").click(); 
     } 
}); 

Pour votre information, la boîte de dialogue est ouvert à l'aide d'un $ ("# dialogue") de dialogue ('ouvert'), pas Autoopen. Vrai. Quelle serait la meilleure pratique pour la tâche?

Merci!

Répondre

2

je ferais:

$('#dialog').keyup(function(e) { 
    if (e.which == 13) { 
     var buttons = $(this).dialog('option', 'buttons'); 
     buttons['Save'](); 
     e.stopPropagation(); 
    } 
}) 
+0

Il semble faire le travail pour un dialogue, mais quand « Enregistrer » ouvre une nouvelle boîte de dialogue, tout ferme .. la nouvelle boîte de dialogue n'a pas d'autre « Enregistrer "button, soit ... – Rio

+0

Le gestionnaire d'événement keyup ne sera pas détaché de l'élément sauf si vous supprimez l'élément du DOM. On dirait que vous avez un autre problème ailleurs. –

2

est pour les lettres keypress. Le clavier est pour tout. J'essaierais d'utiliser le clavier.

Votre code ne s'exécute probablement pas. Entrer déclenchera l'action par défaut, c'est pourquoi cela fonctionne la première fois.

Plus d'infos ici:

http://www.bloggingdeveloper.com/post/KeyPress-KeyDown-KeyUp-The-Difference-Between-Javascript-Key-Events.aspx

+0

En fait, vous avez partiellement raison. Si la boîte de dialogue contient un formulaire, appuyer sur Entrée le soumet, mais la réponse de Ken aide quand la boîte de dialogue ne contient pas de formulaire, car appuyer sur Entrée ne fait rien. – Rio