2011-11-24 7 views
4

J'utilise actuellement l'implémentation du plugin JQuery-UI auto-complete combobox, mais j'ai changé le script de sorte que l'élément d'entrée ajouté par le plugin est désactivé (l'utilisateur ne peut pas écrire dans l'entrée, il ne peut cliquer sur le bouton pour afficher les options) comme ceci:Jquery UI autocomplete combobox entrée désactivée

$.widget("ui.combobox", { 

_create: function() { 
    var self = this, 
        select = this.element.hide(), 
        selected = select.children(":selected"), 
        value = selected.val() ? $.trim(selected.text()) : ""; 
    var input = this.input = $("<input>") 
       .attr("name", select.attr("name")) 
       .attr('disabled', true) 
       .insertAfter(select) 
       .val(value) 
       .autocomplete({ ....... 

Probablement parce que l'entrée est désactivée, la zone de liste déroulante ne cache pas après que je perdre le focus en cliquant sur l'espace vide, ou en cliquant sur une autre zone de liste déroulante (l'élément d'entrée a le gestionnaire d'événements de flou, mais il ne se déclenche pas).

Existe-t-il un moyen de définir un événement de flou sur un élément d'entrée qui est désactivé ou un moyen de masquer la zone de liste déroulante lorsqu'un utilisateur souhaite perdre le focus?

+0

Salut @Atzoya, je l'ai utilisé votre approche et il fonctionne bien dans FF, mais j'ajouté l'événement click pour le contrôle d'entrée trop de sorte que si l'utilisateur clique sur l'entrée de la chute apparaît vers le bas. Fonctionne bien en FF mais IE9 le drop-down saute et disparaît à nouveau. Comment avez-vous travaillé ce peu? – Jacques

+0

Je l'ai vérifié et la même chose se passe dans mon application. Je suis actuellement très occupé sur un autre projet, mais dès que j'en aurai le temps, j'essaierai de trouver une solution à ce problème. Quand et si je le fais, je l'afficherai ici. – Atzoya

+1

Salut @Atzoya, j'ai commenté la ligne qui traite d'un bug $ (this) .blur(); et cela a résolu mon problème. Eh bien cela fonctionne en FF, Chrome, Safari et IE 7,8 et 9. Pas sûr de IE6 si – Jacques

Répondre

4

Je repenserais votre stratégie un peu. La saisie semi-automatique n'est pas conçue pour fonctionner avec une entrée disabled. Au lieu de cela, j'utiliserais readonly. Remplacer:

.attr("disabled", true) 

avec:

.attr("readonly", true) 

Vous obtiendrez le curseur dans le input, mais votre exigence initiale est remplie.

Exemple:http://jsfiddle.net/S77xa/1/

+0

Merci. Cela a fonctionné fantastique – Atzoya

+0

@Atzoya: Pas de problème, heureux d'aider! –

+0

merci, mais l'index des onglets ne fonctionne pas quand j'ai plusieurs combobox! –

0

Vous devez changer:

.attr("disabled", true); 

à:

.attr("disabled", "disabled"); 

Jetez un oeil à ce violon: http://jsfiddle.net/Lq8tq/1/

J'espère que cela aide!

+0

Cela désactive la zone de texte, mais en cliquant n'importe où en dehors de la zone de liste déroulante ne ferme pas la zone de liste déroulante. La solution d'Andrew a parfaitement fonctionné pour moi, merci pour la suggestion de toute façon – Atzoya

0

Essayez ceci.

$('comboboxname').combobox('disable'); 

$('comboboxname').combobox('enable');