201 votes

comment désactiver l'élément DIV et tout ce qu'il contient

Je dois désactiver un DIV et tout son contenu à l'aide de Javascript. Je peux jurer qu'en faisant un simple

<div disabled="true"> 

fonctionnait pour moi avant, mais pour une raison quelconque, il ne fonctionne plus. Je ne comprends pas pourquoi.

Dans IE10 : le texte "Click Me" n'est pas grisé et le gestionnaire de clics fonctionne toujours.

J'ai besoin que cela fonctionne pour IE10. Voici mon code.

<html>
    <script>
         function disableTest(){

            document.getElementById("test").disabled = true;
            var nodes = document.getElementById("test").getElementsByTagName('*');
            for(var i = 0; i < nodes.length; i++){
                nodes[i].disabled = true;
            }

         }

     </script>

<body onload="disableTest();">
   <div id="test">
       <div onclick="alert('hello');">
           Click Me
       </div>
   </div>

</body>
</html>

0 votes

J'essaie simplement de désactiver tout ce qui se trouve à l'intérieur d'un DIV et de ses gestionnaires.

3 votes

Non ! Les divs ne peuvent pas être désactivés. Seulement le formulaire et les éléments du formulaire.

1 votes

"true" n'est pas une valeur valide pour l'option disabled -attribut (dans le balisage)

464voto

bukka Points 639

L'instruction css suivante désactive les événements de clic

pointer-events:none;

5 votes

Elle est vraiment bonne, mais il y en a qui ne la soutiennent pas aujourd'hui : caniuse.com/pointer-événements

0 votes

Celui-ci est vraiment bon pour la désactivation de select2 car la fonction intégrée pour cela ne fonctionne pas vraiment.

39 votes

+10, StackOverflow ne me laisse jamais tomber. Peu importe les utilisateurs d'IE obsolètes, je leur conseille de toujours mettre à jour leur navigateur.

67voto

Danwilliger Points 463

Essayez ça !

$("#test *").attr("disabled", "disabled").off('click');

Je ne vois pas que vous utilisez jquery ci-dessus, mais vous l'avez listé comme une balise.

33 votes

disabled n'est pas une propriété valide pour div .

17 votes

.prop("disabled", true) serait mieux (si tant est que cela fonctionne)

0 votes

Tous les enfants de la division sont ainsi désactivés. Ainsi, s'il a des entrées ou des boutons radio, cela les désactivera. Il est fortement recommandé d'être plus précis avec les sélecteurs.

11voto

Jai Points 23908

Je pense que les scripts en ligne sont difficiles à arrêter, mais vous pouvez essayer avec ceci :

<div id="test">
    <div>Click Me</div>
</div>

et script :

$(function () {
    $('#test').children().click(function(){
      alert('hello');
    });
    $('#test').children().off('click');
});

REGARDEZ FIDDLE ET VOYEZ SI CELA PEUT VOUS AIDER

En savoir plus sur .off()

3voto

Difusio Points 369

Je n'ai aucune expérience en la matière, mais il semble que BlockUI est ce que vous recherchez. Essayez-le.

2voto

Spencer Lockhart Points 594

Vous ne pouvez pas utiliser "disable" pour désactiver un événement de clic. Je ne sais pas comment ou si cela a fonctionné dans IE6-9, mais cela n'a pas fonctionné sur Chrome, et cela ne devrait pas fonctionner sur IE10 comme ça.

Vous pouvez également désactiver l'événement onclick en joignant un événement d'annulation :

;(function () {
    function cancel () { return false; };
    document.getElementById("test").disabled = true;
    var nodes = document.getElementById("test").getElementsByTagName('*');
    console.log(nodes);
    for (var i = 0; i < nodes.length; i++) {
        nodes[i].setAttribute('disabled', true);
        nodes[i].onclick = cancel;
    }
}());

De plus, le fait d'activer directement l'option "désactivé" sur un nœud n'ajoute pas nécessairement l'attribut - l'utilisation de setAttribute le fait.

http://jsfiddle.net/2fPZu/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X