11
votes

Impossible de définir désactivé = false (javascript)

J'ai cette fonction:

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


4 commentaires

Il est temps de passer à jQuery. C'est toute la rage avec les enfants ces jours-ci.


JQuery serait trop exagéré pour cela.


Assurez-vous que votre entrée d'action est le Boolean Vrai ou False et non la chaîne «VRAI» ou «FALSE», cela aurait très bien pu être votre problème.


JQuery, pour cela? Jamais.


4 Réponses :


25
votes

édité pour refléter les commentaires.

Selon le W3C, le code que vous avez affiché doit être correct. L'attribut désactivé est un attribut booléen. L'utilisation de la méthode removeattribute () peut également être utile.

Dans mon expérience, vous pouvez également obtenir cet effet en utilisant les valeurs de chaîne 'désactivées' ou ''. Cela peut fonctionner car ces valeurs sont contraintes dans une représentation booléenne lorsque le navigateur les rencontre.


10 commentaires

??? J'ai une fonction similiaire qui désactive certaines entrées en frappant le bouton radio. Lorsque Hittin Radio 1, tous les éléments sont désactivés, mais lors de la frappe radio 2, tous sont activés à nouveau. Ça marche très bien. Soin d'expliquer cela?


Différentes entités peuvent effectuer de différentes manières, mais le HTML conforme standard approprié indique que vous devez déclarer un élément désactivé comme désactivé = "désactivé"


Concernant le HTML 4.01 et HTML5 SPECS L'attribut désactivé est décrit comme un attribut Boolean , lorsque la présence d'un attribut booléen sur un élément représente la valeur réelle et l'absence de L'attribut représente la fausse valeur.


Je pense que cela fait référence à une autre réponse que j'ai donnée où j'ai utilisé vrai / faux. La chose étrange utilise True / False a fonctionné bien pour FF et IE6. Mais utiliser "handicapé" sera vraiment meilleur.


Kieranmaine: La chaîne "désactivée" est incorrecte pour la propriété désactivée . Il devrait être booléen true ou false . Voir le commentaire de CMS.


Tom Gullen: désactivé = "désactivé" ou juste désactivé sont des attributs valides pour les entrées dans HTML.


Tout très intéressant. Merci tim.


@Tim Down - J'ai révisé la réponse de manière à ce que je crois reflète vos commentaires. Pouvez-vous aider à expliquer pourquoi le code de l'utilisateur a publié initialement, qui adhère au W3C, ne fonctionne pas (la raison de la poste)?


g.d.d.c: Le code posté a initialement l'air correct. Il doit y avoir un autre problème à faire avec le reste de la configuration que nous n'avons pas vus. Il existe une question générale que beaucoup de personnes semblent confuses sur la relation entre les attributs et les propriétés, une confusion que je pense est exacerbée par la méthode ATTT () de JQuery's's's's's's's () , qui dans la majorité des cas définit une propriété , pas un attribut. En général, en raison d'un comportement incorrect dans IE et de simplicité, vous ferez mieux d'oublier les attributs de JavaScript et d'utiliser uniquement des propriétés.


Je pense que vous êtes (toujours) confondre le désactivé html attribut et le désactivé propriété Vous obtenez / définir JavaScript à l'aide de élément.disabled [= (true | false)] . Voir aussi MSDN .



6
votes

Essayez .Disabled = null ou .RemoVeAttribute ("désactivé") . Ma compréhension est que c'est la présence ou l'absence du document Désactivé qui régit les désindiquences, pas sa valeur.


1 commentaires

D'accord. Cela fonctionne également: $ ('# mybutton'). Prop ("Disabled", NULL);



6
votes

Pour désactiver les éléments Vous devez utiliser l'attribut désactivé = "désactivé" code> plutôt que true code> ou false code>. Pour que cela soit activé à nouveau, vous devez supprimer l'attribut désactivé code>. Modifiez votre code comme celui-ci:

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


4 commentaires

@Marcel KORPEL: WAM: Comment est-ce inutile? Et quel est le problème avec action === true / false ???


@ MS2GER: Vous gaspillez mon temps. Ce n'est jamais équivalent! Op était réglage désactivé sur true ou false qui était faux. Il peut être défini par désactivé = "désactivé" ou supprime l'attribut désactivé Quelque chose que je fais avec setattribute et removeattribute .


Ce code, bien que excessivement verbose, est correct - tandis que la réponse «correcte» marquée n'est pas, alors je ne sais pas comment cela s'est retrouvé avec A -1.


Stuart: Cette réponse peut être correcte selon la norme DOM (en dehors de l'erreur Copy / Coller dans la première section), mais vous éteignez beaucoup mieux à l'aide de la propriété désactivée à la place.



3
votes

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


1 commentaires

+1. Je ne comprends pas pourquoi cette réponse était en bas, les autres réponses confondent la propriété avec l'attribut.