2009-08-12 5 views
4

Si vous connaissez une meilleure façon de le faire alors s'il vous plaît faites le moi savoir. Droite J'ai une page qui contiendra beaucoup de boutons, graphiques et tableaux. J'ai lu sur l'arrêt de la propagation d'événement et c'est ce que je vais utiliser. Je souhaite activer l'aide sur les éléments cerain. J'ai une case à cocher qui change le curseur sur l'aide activé divs. Ce que je veux faire est de préfixer une fonction d'aide avant le comportement de clic normal.Jquery préférez cliquer gestionnaire

Fondamentalement, c'est comme ça.

<input type="button" value="Click me" onclick="alert ('hello')" /> 

ce que je veux est que si la case à cocher est cliqué ajouter une classe css (déjà fait), puis-je ajouter un gestionnaire de clic avant le clic normal. Lorsque l'élément est cliqué, la fonction d'aide est exécutée et le gestionnaire de clic par défaut sur le bouton n'est pas déclenché. Lorsque la case d'aide n'est pas cochée, je veux supprimer la fonction d'aide. Je me rends compte que je pourrais hardocde cela pour chaque élément et avoir une vérification dans la fonction helper pour voir si la case est cochée. Mais je préférerais une façon plus générique de le faire.

Merci

John

Répondre

8
 $(":button").each(function() { 

      // your button 
      var btn = $(this); 

      // original click handler 
      var clickhandler = btn.attr("onclick"); 
      btn.attr("onclick", "return false;"); 

      // new click handler 
      btn.click(function() { 

       if ($("#chkbox").attr("checked") == true) { 

        // TODO: show your help 
        // TODO: catch event 

       } 
       else { 

        clickhandler(); 

       } 
      }); 
     }); 
+0

excellent, exactement ce dont j'avais besoin merci – John

+0

merci pour la simplification de mon code existant. – IEnumerator

0

Je pense que vous voulez jouer avec bind/délie dans ce cas - voir http://docs.jquery.com/Events/unbind#typefn

lors de la sélection de la case à cocher vous pouvez lier les nouveaux événements de cliquer sur vos boutons - et déliez-les plus tard.

Vous aurez probablement aussi de travailler avec Event.preventDefault (http://docs.jquery.com/Events/jQuery.Event) afin de supprimer le comportement de clic par défaut si vous ne voulez pas qu'il

Vous utiliserez des goûts de:

$("a").bind("click", function(event){ 
if ($("#helpcheckbox").attr('checked') 
{ 
    event.preventDefault(); 
    // do something 
} 
}); 

Sans plus de code, il est difficile d'être plus précis.

Questions connexes