Impossible de définir disabled = false (javascript)

J'ai cette fonction:

function disableDiv(divId, action){ var divId = byId(divId); if(action==true){ divId.style.display='none'; } else if(action==false){ divId.style.display='block'; } var inputs = divId.getElementsByTagName("input"); var selects = divId.getElementsByTagName("select"); var i; for (i=0; i<inputs.length; i++){ inputs[i].disabled=action; } for (i=0; i<selects.length; i++){ selects[i].disabled=action; } } 

Cela prend un divId (id of DIV) et une action (false ou true) et obtient toutes les entrées et sélectionne dans la div et définit son attribut invalide soit comme faux soit vrai.

Selon Firebug, les éléments de la Div sont désactivés tout le temps. Mais ils devraient être actifs une fois que vous avez frappé une option de liste déroulante … Le déclenchement est correct, donc vous savez. Je peux voir que cette fonction est appelée en utilisant des zones d'alerte, et elle définit en fait le handicapé = faux. Mais les éléments sont encore désactivés.

Quelque chose à souligner est que, selon Firebug, l'attribut invalide ressemble à ceci:

  <input name="test" id="test" disabled=""> 

Notez qu'il n'y a que deux doubles quotes … Ne devrait-on pas dire "disabled =" disabled "ou" disabled = true "?

Des conseils sur la façon de résoudre les problèmes?

Voici comment j'appelle la fonction:

 (category=="Cars")?disableDiv("nav_sub_cars", false):disableDiv("nav_sub_cars", true); 

Si vous avez besoin de plus de saisie, laissez-moi savoir …

Merci

Édité pour refléter les commentaires.

Selon le W3C, le code que vous avez posté devrait être correct. L'attribut disabled est un attribut booléen. L'utilisation de la méthode removeAttribute() peut également être utile.

Selon mon expérience, vous pouvez également réaliser cet effet à l'aide des valeurs de chaîne 'désactivées' ou ''. Cela peut fonctionner car ces valeurs sont forcées dans une représentation booléenne lorsque le navigateur les rencontre.

Pour désactiver les éléments, vous devez utiliser l'attribut disabled = "disabled" plutôt que true ou false . Pour le rendre à nouveau activé, vous devez supprimer l'attribut disabled . Modifiez votre code comme ceci:

 for (i=0; i<inputs.length; i++){ if (action === false) { inputs[i].removeAttribute('disabled'); } else { inputs[i].setAttribute('disabled', 'disabled'); } } for (i=0; i<selects.length; i++){ if (action === false) { selects[i].removeAttribute('disabled'); } else { selects[i].setAttribute('disabled', 'disabled'); } } 

Les fonctions setAttribute et removeAttribute sont utilisées pour définir et supprimer l'attribut disabled respectivement.

Essayez .disabled = null ou .removeAttribute('disabled') . Je crois comprendre que c'est la présence ou l'absence de l'attribut disabled qui régit la désactivité, et non sa valeur.

Plus de code nécessaire. Tout semble correct, et la définition de la propriété disabled d'un élément <input> sur une valeur booléenne (l'approche correcte) fonctionne certainement dans Firefox, quelle que soit la présence ou l'absence de l'attribut disabled dans le code HTML source.