jQueryUI de saisie semi-automatique, sélectionnez " ne fonctionne pas sur le clic de la souris, mais fonctionne sur les principaux événements
JS/JQuery:
$this.find('input').autocomplete({
source: "/autocomplete_tc_testcasename",
minLength: 2,
focus: function(e,ui){
$(this).val(ui.item.label);
return false;
},
select: function(e, ui) {
console.log("Selected: "+ui.item.value);
}
});
CSS:
.ui-autocomplete {
max-height: 200px;
overflow-y: auto;
padding: 5px;
}
.ui-menu {
list-style: none;
background-color: #FFFFEE;
width: 50%;
padding: 0px;
border-bottom: 1px solid #DDDDDD;
border-radius: 6px;
-webkit-box-shadow: 0 8px 6px -6px black;
-moz-box-shadow: 0 0px 0px -0px black;
box-shadow: 0px 2px 2px 0px #999999;
}
.ui-menu .ui-menu {
}
.ui-menu .ui-menu-item {
color: #990000;
font-family:"Verdana";
font-size: 12px;
border-top: 3px solid #DDDDDD;
background-color: #FFFFFF;
padding: 10px;
}
Résumé Du Problème:
- AJAX fonctionne très bien, je reçois toutes les entrées correctement dans le menu de saisie semi-automatique.
- Je suis en mesure d'utiliser la touche up/down pour sélectionner les éléments de menu et une fois que j'ai appuyé sur la touche retour, sélectionnez l'événement est déclenché correctement et le message de la console s'affiche.
- Je peux me concentrer sur l'interface utilisateur-les éléments de menu avec succès et la capture de la souris sur le cours des événements pour changer la valeur de l'entrée de texte.
- Je n'arrive pas à cliquer sur l'élément de menu et le feu, sélectionnez l'événement. j'.e quand je clique sur un élément de menu, le message de la console n'est jamais affiché.
- C'est comme si l'événement click est rejetant le menu et de la fermer au lieu de réellement tirer un événement select. Aucune idée sur la façon d'obtenir plus de ce problème?
- J'ai essayé le "appendTo : $cette" place à l'entrée du div parent, puis cliquez sur la souris fonctionne très bien! - sélectionnez l'événement est déclenché et le message de la console s'affiche correctement. Mais ce n'est pas ce que je veux depuis le menu est ajouté à l'intérieur de la div parent qui déforme l'INTERFACE utilisateur, car ils partagent probablement les mêmes z-index. Même si je change de z-index à un higehr nombre dans ce cas, il n'a pas assez d'aide. Donc, je suis à la recherche d'une solution où je n'ai pas " avoir à utiliser les appendTo si possible.
J'ai trouvé diverses autres questions tout à fait dans le stade, mais aucune de ces semblent répondre à ma question.
jQuery Autocomplete - Gauche de la Souris, Cliquez sur pas de tir Sélectionnez l'événement
jQuery UI autocomplete sélectionnez l'événement à ne pas travailler avec un clic de souris
Merci!
Cela va être vraiment difficile de recréer et de résoudre, à moins que vous pouvez créer un exemple de votre problème sur jsfiddle.net ou poster un lien vers un site externe ....
Merci pour l'astuce. Dans le processus de firebug-ment le problème, j'ai trouvé que 'blur' événement est appelé avant de la souris-cliquez sur sélection sur le menu de saisie semi-automatique. Une fois que j'ai changé la logique autour de cette de gérer à la fois de ces événements dans un ordre particulier, sélectionnez fonctionne maintenant par un clic de souris.
pouvez-vous décrire exactement comment vous "changé la logique autour de cette de gérer à la fois de ces événements dans un ordre particulier"? Je suis en cours d'exécution dans ce problème et ma connaissance de la gestion des événements, la JS n'est pas assez bon encore pour me comprendre moi-même. merci
J'ai ajouté un indicateur de saisie semi-automatique=false' mondiale de flou et de saisie semi-automatique. Quand j'entre dans mon champ de saisie de saisie semi-automatique du flou fonction de gestion, j'ai un if(!la saisie semi-automatique) {//faire le flou des trucs ici}. La saisie semi-automatique "focus", j'ai mis de saisie semi-automatique=true; Dans la saisie semi-automatique "fermer", j'ai mis de saisie semi-automatique=false et appeler explicitement blur() sur mon champ de saisie semi-automatique.
Merci pour l'astuce. Dans le processus de firebug-ment le problème, j'ai trouvé que 'blur' événement est appelé avant de la souris-cliquez sur sélection sur le menu de saisie semi-automatique. Une fois que j'ai changé la logique autour de cette de gérer à la fois de ces événements dans un ordre particulier, sélectionnez fonctionne maintenant par un clic de souris.
pouvez-vous décrire exactement comment vous "changé la logique autour de cette de gérer à la fois de ces événements dans un ordre particulier"? Je suis en cours d'exécution dans ce problème et ma connaissance de la gestion des événements, la JS n'est pas assez bon encore pour me comprendre moi-même. merci
J'ai ajouté un indicateur de saisie semi-automatique=false' mondiale de flou et de saisie semi-automatique. Quand j'entre dans mon champ de saisie de saisie semi-automatique du flou fonction de gestion, j'ai un if(!la saisie semi-automatique) {//faire le flou des trucs ici}. La saisie semi-automatique "focus", j'ai mis de saisie semi-automatique=true; Dans la saisie semi-automatique "fermer", j'ai mis de saisie semi-automatique=false et appeler explicitement blur() sur mon champ de saisie semi-automatique.
OriginalL'auteur rajivRaja | 2012-03-21
Vous devez vous connecter pour publier un commentaire.
J'ai été confronté à un problème similaire. Je voulais envoyer le formulaire lorsque l'utilisateur clique sur une option. Mais la forme obtenu soumis avant même la valeur de l'entrée peut être définie. Donc sur le serveur du contrôleur obtenu une valeur null.
Je l'ai résolu en utilisant une version modifiée de William Niu de la réponse sur un autre post - jQuery UI autocomplete sélectionnez l'événement à ne pas travailler avec un clic de souris
En gros, j'ai vérifié pour le type d'événement. Si c'était un clic puis-je définir explicitement la zone de saisie de la valeur de la valeur dans l'interface utilisateur.de l'élément.de la valeur. Voir l'extrait ci-dessous,
OriginalL'auteur atsurti
Je l'ai testé dans toutes les version de IE (y compris 9) et finit avec une entrée vide-contrôle après j'ai sélectionné un élément à l'aide de la souris. Cela a causé quelques maux de tête. Je suis même allé vers le bas sur le code source de jQuery UI pour voir ce qui s'y passe, mais n'ai pas trouvé toutes les allusions. Nous pouvons le faire par la fixation d'un délai, qui, en interne, les files d'attente d'un événement dans le javascript-moteur de IE. Parce que c'est garanti, que ce délai d'attente-l'événement sera mis en file d'attente après les événements de focus (ce qui a déjà été déclenchée avant par IE lui-même)
OriginalL'auteur Manish Kundu
J'ai le même problème, mais dans mon cas c'est encore plus étrange.
l'sélectionnez l'événement est déclenché à chaque fois deuxième (lors de l'utilisation de la souris).
pour moi, l'événement select est également déclenché l'amende juste au cas où je utiliser mon clavier.
malheureusement je ne pourrais pas reproduire cette question par le biais de jsfiddle. mais je tiens à vous offrir mes jsfiddle, peut-être que c'est un bon point de départ pour une analyse plus approfondie.
voici mon jsFiddle code: http://jsfiddle.net/knzNg/
La seule différence est que j'utilise un local tableau en tant que source de données pour la saisie semi-automatique des données.
Je suppose qu'il est préférable de modifier le code pour utiliser une source de données distante.
Avez-vous d'autres souris gestionnaires d'événements tels que le flou, hover, dblclick, mouseover, mouseout etc? Dans mon cas, j'ai eu un flou gestionnaire qui l'emporterait événement de clic sur le menu. Une fois que j'ai changé la logique autour d'elle, tout fonctionne comme prévu.
J'ai résolu le problème dans mon cas. le problème était vraiment que du code javascript qui je n'avais pas conscience de fait quelques manipulations dom qui a causé le jq ui widget d'appeler le détruire fonction de saisie semi-automatique et de le recréer à nouveau. donc, le problème dans mon cas semble être que d'autres code js... donc, dans le futur, je vais être plus conscients de ce fait. merci beaucoup!
OriginalL'auteur Nabi
Je pense qu'il y a peut-être un bug dans la liste déroulante code, que je ne pouvais pas obtenir que cela fonctionne. Essayez de changer", sélectionnez: "à" est sélectionné:'.
Ou vous pouvez essayer de modifier le code dans le code JQuery UI, je crois que ci-dessous est le coupable, de sorte qu'une modification de 'sélectionner' pourrait fonctionner. J'aurais peut-être que je n'ai pas essayé, j'ai simplement indiqué ci-dessus.
Uncaught TypeError: this._trigger is not a function
, est quelle version?C'est un bon il y a 5 ans!
OriginalL'auteur BJury
Changement de jquery de validation de la version plug-in à 1,9 fonctionne pour moi
OriginalL'auteur user2163707
J'ai eu ce problème aujourd'hui et a constaté que le champ qui doit avoir de saisie semi-automatique, avait un accent événement qui a utilisé le document.getElementById('id').valeur= avec le mauvais nom, pour couper les scripts.
OriginalL'auteur Bjarne Havnen
@atsurti commentaire est bien intentionné, mais il ya une meilleure façon.
Il suffit d'utiliser un délai d'attente au lieu de cela, jQuery permettant à la fois de définir la forme. Moins de code = code meilleur, oui? 🙂
OriginalL'auteur Subimage
J'ai le même problème et après beaucoup de recherches sur google, il semble que certains autres plugin jquery est en conflit avec le
UI Core
. Donc, le résultat était que monjquery validation plugin version 1.6
a été la cause de l'erreur. J'ai changéjquery validation to 1.9
et maintenantautocomplete
est sélectionnable à l'aide de la souris.OriginalL'auteur Sooraj
Si quelqu'un d'autre est en face de cela 🙂 après 2 ans et demi ..
La solution pour l'OP du problème est d'appeler
event.stopPropagation()
à l'intérieur de votreselect
de rappel.Exemple:
juste retourner false à partir de la fonction de rappel n'a pas de travail
OriginalL'auteur Radu
Cela fonctionne pour moi:
OriginalL'auteur Javier Morales