J'ai une boîte de dialogue de l'interface utilisateur jQuery avec un formulaire. Je voudrais simuler un clic sur l'un des boutons de la boîte de dialogue afin que vous n'ayez pas à utiliser la souris ou la tabulation dessus. En d'autres termes, je veux qu'il agisse comme une boîte de dialogue GUI régulière où simule le fait d'appuyer sur le bouton "OK".
Je suppose que cela peut être une option simple avec la boîte de dialogue, mais je ne la trouve pas dans la documentation de l'interface utilisateur jQuery . Je pouvais lier chaque entrée de formulaire avec keyup () mais je ne savais pas s'il y avait un moyen plus simple / plus propre. Merci.
Réponses:
Je ne sais pas s'il y a une option dans le widget jQuery UI , mais vous pouvez simplement lier l'
keypress
événement au div qui contient votre boîte de dialogue ...Cela fonctionnera quel que soit l'élément qui a le focus dans votre boîte de dialogue, ce qui peut ou non être une bonne chose selon ce que vous voulez.
Si vous souhaitez en faire la fonctionnalité par défaut, vous pouvez ajouter ce morceau de code:
Voici une vue plus détaillée de ce à quoi cela ressemblerait:
la source
J'ai résumé les réponses ci-dessus et ajouté des éléments importants
Avantages:
textarea
,select
,button
ou entrées avec le bouton de type, imaginez en cliquant utilisateur d' entrer surtextarea
et obtenir le formulaire soumis au lieu d'obtenir une nouvelle ligne!$(document).ready
document
et ne liera pas le gestionnaire à chaque boîte de dialogue comme dans le code ci-dessus, pour plus d'efficacité$('<div><input type="text"/></div>').dialog({buttons: .});
:first
Désavantages:
eq()
ou appeler une fonction à l'intérieur de l'instruction if'.ui-dialog'
Je sais que la question est ancienne mais j'ai eu le même besoin, alors j'ai partagé la solution que j'ai utilisée.
la source
.delegate()
était obsolète dans jQuery 3.0, donc.on()
(disponible depuis la version 1.7) est probablement la voie à suivre à ce stade.Cela fonctionne à merveille avec la dernière version de JQuery UI (1.8.1). Vous pouvez également utiliser: premier au lieu de: dernier selon le bouton que vous souhaitez définir par défaut.
Cette solution, comparée à celle sélectionnée ci-dessus, a l'avantage de montrer quel bouton est le bouton par défaut pour l'utilisateur. L'utilisateur peut également TAB entre les boutons et appuyer sur ENTRÉE cliquera sur le bouton actuellement sous le focus.
À votre santé.
la source
Un moyen brut mais efficace de rendre ce travail plus générique:
Ensuite, lorsque vous créez une nouvelle boîte de dialogue, vous pouvez le faire:
Et utilisez-le comme une boîte de dialogue jquery normale par la suite:
Il existe des moyens d'améliorer cela pour que cela fonctionne dans des cas plus particuliers. Avec le code ci-dessus, il choisira automatiquement le premier bouton de la boîte de dialogue comme bouton à déclencher lorsque vous appuyez sur Entrée. Il suppose également qu'il n'y a qu'un seul dialogue actif à un moment donné, ce qui peut ne pas être le cas. Mais vous voyez l'idée.
Remarque: comme mentionné ci-dessus, le bouton sur lequel vous appuyez sur Entrée dépend de votre configuration. Ainsi, dans certains cas, vous souhaiterez utiliser le sélecteur: first dans la méthode .find et dans d'autres, vous souhaiterez peut-être utiliser le sélecteur: last.
la source
Plutôt que d'écouter les codes clés comme dans cette réponse (que je n'ai pas pu mettre au travail), vous pouvez vous lier à l'événement submit du formulaire dans la boîte de dialogue, puis faire ceci:
Donc, tout ressemblerait à ça
Notez que différents navigateurs gèrent la clé d'entrée différemment, et certains ne font pas toujours une soumission lors de l'entrée.
la source
Ben Clayton est le plus net et le plus court et il peut être placé en haut de votre page d'index avant que toute boîte de dialogue jquery ait été initialisée. Cependant, je tiens à souligner que ".live" est obsolète. L'action préférée est désormais ".on". Si vous voulez que ".on" fonctionne comme ".live", vous devrez utiliser des événements délégués pour attacher le gestionnaire d'événements. Aussi, quelques autres choses ...
Je préfère utiliser la méthode ui.keycode.ENTER pour tester la clé d'entrée car vous n'avez pas à vous souvenir du code de clé réel.
Utiliser "$ ('. Ui-dialog-buttonpane button: first', $ (this))" pour le sélecteur de clic rend l'ensemble de la méthode générique.
Vous voulez ajouter "return false;" pour empêcher la valeur par défaut et arrêter la propagation.
Dans ce cas...
la source
Je ne sais pas ce qui est plus simple, mais normalement, vous suivrez quel bouton a le focus actuel. Si le focus est modifié en un contrôle différent, le "focus bouton" resterait alors sur le bouton qui avait le focus en dernier. Normalement, le "focus du bouton" démarre sur votre bouton par défaut. La tabulation vers un bouton différent changerait le "focus du bouton". Vous devrez décider si la navigation vers un élément de formulaire différent réinitialisera à nouveau le "focus du bouton" sur le bouton par défaut. Vous aurez probablement également besoin d'un indicateur visuel autre que le navigateur par défaut pour indiquer le bouton focalisé car il perd le focus réel dans la fenêtre.
Une fois que vous avez la logique de mise au point du bouton vers le bas et implémentée, alors j'ajouterais probablement un gestionnaire de clé au dialogue lui-même et lui demanderais d'appeler l'action associée au bouton actuellement "concentré".
EDIT : Je suppose que vous voulez pouvoir appuyer sur Entrée à chaque fois que vous remplissez des éléments de formulaire et que l'action du bouton "actuel" a la priorité. Si vous ne voulez ce comportement que lorsque le bouton est réellement focalisé, ma réponse est trop compliquée.
la source
J'ai trouvé cette solution, elle fonctionne sur IE8, Chrome 23.0 et Firefox 16.0
Il est basé sur le commentaire de Robert Schmidt.
J'espère que cela aidera n'importe qui.
la source
Parfois, nous oublions les fondamentaux de ce que le navigateur prend déjà en charge:
Cela amènera la ENTERclé à soumettre le formulaire.
la source
J'ai fait de cette façon ...;) J'espère que cela sera utile pour quelqu'un ..
la source
Cela devrait fonctionner pour déclencher le clic du gestionnaire de clics du bouton. cet exemple suppose que vous avez déjà configuré le formulaire dans la boîte de dialogue pour utiliser le plugin jquery.validate. mais pourrait être facilement adapté.
la source
Je me rends compte qu'il y a déjà beaucoup de réponses, mais je pense naturellement que ma solution est la plus soignée, et peut-être la plus courte. Il a l'avantage de fonctionner sur toutes les boîtes de dialogue créées à tout moment dans le futur.
la source
Voici ce que j'ai fait:
Dans ce cas, myForm est un objet jQuery contenant le html du formulaire (notez qu'il n'y a pas de balises "form" là-dedans ... si vous les mettez dans tout l'écran, il sera actualisé lorsque vous appuyez sur "Entrée").
Chaque fois que l'utilisateur appuie sur "Entrée" à partir du formulaire, cela équivaudra à cliquer sur le bouton "OK".
Cela évite également le problème d'avoir le formulaire ouvert avec le bouton "ok" déjà mis en évidence. Bien que cela convienne aux formulaires sans champs, si vous avez besoin que l'utilisateur remplisse des éléments, vous souhaitez probablement que le premier champ soit mis en surbrillance.
la source
fait et fait
la source
si vous connaissez le sélecteur d'élément bouton:
Devrait faire l'affaire pour vous. Cela mettra l'accent sur le bouton ok, et entrer "cliquera" dessus, comme vous vous en doutez. Il s'agit de la même technique utilisée dans les boîtes de dialogue natives de l'interface utilisateur.
la source
la source
J'ai trouvé une solution assez simple à ce problème:
la source
Cela a très bien fonctionné pour moi.
la source
Aucune de ces solutions ne semblait fonctionner pour moi dans IE9. J'ai fini avec ça ...
la source
Le corps ci-dessous est utilisé car la boîte de dialogue DIV a été ajoutée sur le corps, donc body écoute maintenant l'événement clavier. Il a testé sur IE8,9,10, Mojila, Chrome.
la source
Parce que je n'ai pas assez de réputation pour publier des commentaires.
Réponse modifiée par Basemm # 35 aussi ajouter dans Escape pour fermer la boîte de dialogue.
la source
Cela fonctionne bien Merci !!!
open: function () { debugger; $("#dialogDiv").keypress(function (e) { if (e.keyCode == 13) { $(this).parent().find("#btnLoginSubmit").trigger("click"); } }); },
la source
Donnez à vos boutons des classes et sélectionnez-les de la manière habituelle:
la source