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;
        }
}

ceci prend un divId (id de DIV) et une action (false ou true) et reçoit toutes les entrées et sélectionne à l'intérieur du div, et définit leur attribut désactivé à false ou true.

selon Firebug, les éléments à l'intérieur de la Div sont désactivés tout le temps. Mais ils devraient être actifs une fois qu'ils ont choisi l'option drop-list... Le déclenchement est bon donc vous savez. Je peux voir cette fonction étant appelée à l'aide des boîtes d'alerte, et il n'en fait définissez le paramètre disabled=false. Mais les éléments sont toujours désactivées.

il faut souligner que selon firebug, l'attribut disabled ressemble à ceci:

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

notez qu'il n'y a que deux doubles-notes... Ne devrait-il pas dire "disabled='disabled'" ou "disabled=true"?

des conseils sur la façon de dépanner davantage?

Voici comment j'appelle la fonction:

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

si vous avez besoin de plus d'informations, laissez-moi savoir...

Merci

10
demandé sur Marcel Korpel 2010-08-24 18:04:18

4 réponses

révisé pour refléter les commentaires.

selon le W3C le code que vous avez posté doit être correct. L'attribut disabled est un attribut booléen. L'utilisation de l' removeAttribute() méthode peut être utile.

d'après mon expérience, vous pouvez également obtenir cet effet en utilisant les valeurs 'disabled' ou ". Cela peut fonctionner parce que ces valeurs sont contraintes dans une représentation booléenne lorsque le navigateur les rencontre.

22
répondu g.d.d.c 2010-08-24 19:40:53

Pour désactiver les éléments dont vous avez besoin pour utiliser l'attribut disabled = "disabled" plutôt que true ou false. Pour qu'il soit à nouveau activé, vous devez supprimer le disabled l'attribut. 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');
  }
}

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

6
répondu Sarfraz 2010-08-25 02:56:33

.disabled = null ou .removeAttribute('disabled'). Ma compréhension est que c'est la présence ou l'absence de l' disabled attribut qui régit la désactivation, pas sa valeur.

5
répondu Stuart 2010-08-24 14:08:06

plus de code nécessaire. Tout semble correct, et le réglage du disabled propriété d'un <input> élément à une valeur Booléenne (l'approche correcte) certainement fonctionne dans Firefox, indépendamment de la présence ou de l'absence de l' disabled attribut dans le HTML source.

3
répondu Tim Down 2010-08-24 14:46:43