12
votes

Arrêtez le formulaire de soumission de touche «Entrée» lors de l'utilisation du widget Autocomplete JQuery Ui

J'ai une forme qui utilise le plugin UI JQuery Autocomplete UI, http://jqueryui.com/demos / autocomplete / , qui fonctionne tous doux, sauf lorsque vous appuyez sur la touche Entrée pour sélectionner un élément de la liste SAOCOMPOMPLETE, il soumet le formulaire.

J'utilise cela dans un site WebForms .NET WebForms, il peut donc y avoir une manipulation JavaScript associée au formulaire que .NET injecte qui remplace les trucs jQuery (je spécule ici).


0 commentaires

7 Réponses :


4
votes

Un moyen est de gérer la touche Appuyez sur la touche et l'ignorez s'il s'agit de la touche ENTER.


1 commentaires

Mais je veux seulement ignorer la touche Entrée si elle est appuyée lors de la sélection d'une option dans la liste des autocomplètes. Si l'utilisateur ne se concentre pas sur la liste des options d'autocomplete, je do veut le formulaire à soumettre.



14
votes

Vous pouvez utiliser un gestionnaire d'événements dessus.

$("#searchTextBox").keypress(function(e) {
    var code = (e.keyCode ? e.keyCode : e.which);
    if(code == 13) { //Enter keycode
        return false;
    }
});


2 commentaires

Bon exemple! Essayez trop ... si (code == $ .ui.keycode.enter) {retour false; } ... . Regardez une Soufe API.JQUERYUI.COM/JQUERY.UI.KEYCODE .. JZM Merci


JQuery Normalise E.Quelle , donc var code = E.Quel suffira. Donc, cela peut être simplifié à si (E.Qui === 13) renvoie false; ou même retour e.qui! == 13;



5
votes
$("#autocomplete_field_id").keypress(function(event){
  var keycode = (event.keyCode ? event.keyCode : event.which);
  if (keycode == '13') {
    event.preventDefault();
    event.stopPropagation();    
  }
});

0 commentaires

2
votes

La réponse Ace Post m'a aidé à résoudre mon problème. Bien que vous puissiez remarquer que le code ACE fournit doit exister avant $ («entrée»). Autocomplete (*****) , sinon vous ne recevriez aucun effet.


0 commentaires

2
votes

Si vous souhaitez toujours que la touche Entrée soumise, une fois la sélection de la sélection automatique effectuée,

if (evt.keyCode === 13 && !$('.ui-autocomplete').is(':visible')) {
   $('.ui-button:first').click();
}
evt.stopPropagation();


1 commentaires

Celui-ci ne fonctionne pas pour moi, car le moment où l'événement passe à ma fonction de rappel, l'autocomplete n'est déjà pas visible.



2
votes

Vous pouvez essayer ceci: xxx

Ceci désactivera la touche ENTER uniquement dans la zone de texte d'entrée


1 commentaires

C'est une excellente solution: vous ne jouez pas avec le code Autocomplete ou l'événement JQuery du tout: videz simplement la clé de retour. Merci!



0
votes

Une ligne de code: xxx

3 choses différentes ici que la réponse acceptée:

  1. jQuery normalise événement.Quel , donc pas besoin de tester pour event.keycode et événement.Quel . .
  2. Puisque vous utilisez évidemment JQuery UI, vous avez accès à des codes de clé nommés via $. ui.keycode , ce qui le rend plus lisible.
  3. La syntaxe de fonction de flèche ES6 simplifie en outre le code.

0 commentaires