web-dev-qa-db-fra.com

Problème .attr ("désactivé", "désactivé")

J'ai cette fonction bascule l'attribut désactivé dans un champ de saisie:

$('.someElement').click(function(){     
  if (someCondition) {
     console.log($target.prev('input')) // gives out the right object
     $target.toggleClass('open').prev('input').attr('disabled', 'disabled');
  }else{
     $target.toggleClass('open').prev('input').removeAttr('disabled'); //this works
  }
})

le removeAttr fonctionne bien mais quand j'ai besoin d'ajouter à nouveau le désactivé, il ne fait rien. Mon console.log est déclenché (et me redonne le bon champ de saisie) donc je suis sûr que mon instruction if fonctionne. Mais lorsque j'inspecte le DOM avec firebug dans firefox, l'attribut désactivé n'apparaît pas.

est-ce que quelqu'un peut m'aider?

PS: s'il vous plaît ne vous concentrez pas sur la fonction ou l'instruction if elle-même, fonctionne bien c'est juste que attr qui ne fonctionne pas pour les handicapés ...

edit : c'est un type d'entrée = "caché" est-il possible que désactivé ne fonctionne pas sur les champs cachés?

22
meo

Merci à tous pour votre contribution! J'ai trouvé le problème:

SON BUG DE FEU !!!

Mon code fonctionne. J'ai demandé au développeur PHP de changer les types d'entrée cachés dans le texte du type d'entrée. La fonctionnalité désactivée fonctionne. Mais la console Firebug ne met pas à jour cet état!

vous pouvez tester ce bug Firebug par vous-même ici http://jsbin.com/uneti3/3# . Thx à aSeptik pour la page d'exemple.

mise à jour: 2. juin 2012: Firebug dans FF11 a toujours ce bug.

41
meo

[~ # ~] mis à jour [~ # ~]

DÉMO: http://jsbin.com/uneti3/

votre code est erroné, cela devrait ressembler à ceci:

 $(bla).click(function() { 
        var disable =  $target.toggleClass('open').hasClass('open');
       $target.prev().prop("disabled", disable);
  });

vous utilisez la fonction toggleClass de manière incorrecte

8
Luca Filosofi

Essayez ce code mis à jour:

$(bla).click(function(){        
  if (something) {
     console.log($target.prev("input")) // gives out the right object
     $target.toggleClass("open").prev("input").attr("disabled", "true");
  }else{
     $target.toggleClass("open").prev("input").removeAttr("disabled"); //this works
  }
})
7
Pranay Rana

J'étais confronté au même problème en basculant l'état désactivé du bouton! Après avoir tiré la removeProp('disabled') le bouton a refusé de se "désactiver" à nouveau! J'ai trouvé une solution intéressante: utilisez prop("disabled",true) pour désactiver le bouton et prop("disabled",false) pour le réactiver! Maintenant, j'ai pu basculer l'état "désactivé" de mon bouton autant de fois que nécessaire! Essaye le.

2
jin