2010-11-23 30 views
1

J'utilise jquery.ui.autocomplete sur plusieurs zones de liste déroulantes sur une page. Dans IE uniquement, la combobox se réinitialise en cas de perte de focus (onBlur). Aucune quantité de débogage JS peut révéler la cause. Aucune suggestion?Remise à zéro de la zone de liste déroulante de saisie semi-automatique sur perte de focus - IE uniquement

+0

Un code aiderait. – superfro

+0

@superfro - absent du bureau en ce moment - code à suivre – Klaptrap

+0

Jquery.ui.autocomplete est la version 1.8.6 - aucune modification – Klaptrap

Répondre

2

Ok, voici ce que j'ai trouvé. J'ai utilisé votre code et répliqué votre bug.

La raison pour laquelle IE est différente dire alors ... firefox, est cette routine:

        change: function (event, ui) { 
             if (!ui.item) { 

Dans Firefox, ui.item est non nul, dans IE est. Donc, dans IE, il doit obtenir les valeurs réelles de '< option value = "foo" > foo </option >' l'attribut de valeur, et de comparer avec quoi dans la zone de texte.

Voici le problème:

value = "foo" doit correspondre exactement ce qui est dans> foo <

<option value="5">Five</option> 

le fera pour effacer le champ lorsque vous flou

<option value="Five">Five</option> 

En firefox et chrome, ils passent ui donc ils ne l'obtiennent pas vérifiez, ça continue juste et tout est cool. Vérifiez que vos valeurs correspondent exactement au texte de l'option.

+0

OK cool - Je vais vérifier et poster - merci pour le diagnostic rapide. – Klaptrap

+0

Modification modifiée: bloc fonction (événement, ui) à: – Klaptrap

+0

var uiItemIsEmpty = false; if ($ .browser.msie) { if (! This.value) {uiItemIsEmpty = true; } } else { if (! Ui.item) {uiItemIsEmpty = true; } if (uiItemIsEmpty) { – Klaptrap

0

analyse de superfro est correcte, mais vous pouvez utiliser option éléments dont la valeur diffère du texte si vous modifiez cette ligne de code:

if (this.value.match(matcher)) { 

à:

if ($(this).text().match(matcher)) { 

De cette façon, vous correspondez à TEXT à l'intérieur de <option value="VALUE">TEXT</option> au lieu de VALUE.