Le bouton désactivé écoute toujours l’événement de clic

J’ai un problème sous une forme où je fais quelques validations jQuery. Si un champ de saisie spécifique n’est pas renseigné, il convient de désactiver le bouton “avancer” en ajoutant un atsortingbut désactivé:

if errors $('.btn-move-forward').attr("disabled", true) 

cela fonctionne mais j’ai aussi un événement de clic sur ce bouton: (coffeescript)

 $('.btn-move-forward').click -> $('#step2, #step3').toggle() 

Je m’attends à ce que .btn-move-forward ne déclenche pas l’événement click lorsque le bouton est désactivé, mais c’est le cas !!

Premièrement: je ne comprends pas pourquoi parce que chaque spécification de navigateur définit que cela ne devrait pas se produire. Quoi qu’il en soit, j’ai essayé de le contourner en procédant comme suit:

 $('.btn-move-forward').click -> if !$(this).is(:disabled) $('#step2, #step3').toggle() 

ou ca

 $('.btn-move-forward').click -> if $(this).prop("disabled", false) $('#step2, #step3').toggle() 

ou en combinant les auditeurs de l’événement comme ceci:

 $('.btn-move-forward').on 'click', '.btn-move-forward:enabled', -> $('#step2, #step3').toggle() 

Non, tout cela ne fonctionnera pas correctement. Le bouton se comporte toujours comme un bouton Avancer.

Tout ce que je veux, c’est que le bouton n’écoute pas onclick s’il est désactivé.

La propriété disabled s’applique uniquement aux éléments de formulaire. Cela signifie que, sauf si l’ .btn-move-forward est un ou un l’atsortingbut disabled n’aura aucun effet.

Vous pouvez voir un exemple de travail en utilisant un button ici:

 $('.btn-move-forward').prop("disabled", true).click(function() { console.log('Moving forward...'); }) 
   

S’il vous plaît hors de l’événement clic

 $('.btn-move-forward').off('click'); 

Changez-le pour utiliser prop() place.

 $('.btn-move-forward').prop("disabled", true) 

pour désactiver:

 $('.btn-move-forward').prop("disabled", true); 

pour réactiver:

 $('.btn-move-forward').removeClass('disabled'); // do this also. $('.btn-move-forward').prop("disabled", false);