2010-05-06 15 views
6

Desidero aggiungere un evento click jQuery a href che hanno già un evento onclick. Nell'esempio seguente, l'evento onclick codificato hard verrà attivato per primo. Come posso invertirlo?ordine di eventi onclick

<a class="whatever clickyGoal1" href="#" onclick="alert('trial game');">play trial</a> 
<br /> 
<a class="whatever clickyGoal2" href="#" onclick="alert('real game');">real trial</a> 
<p class="goal1"> 
</p> 
<p class="goal2"> 
</p> 

<script type="text/javascript"> 
    $("a.clickyGoal1").click(function() { 
     $("p.goal1").append("trial button click goal is fired");//example 
    }); 
    $("a.clickyGoal2").click(function() { 
     $("p.goal2").append("real button click goal is fired"); //example 
    });   
</script> 

risposta

6

Avrete bisogno di ottenere il gestore di eventi originale, sostituirlo con il proprio e quindi chiamare il gestore originale, ma non sono sicuro se questo è possibile con jQuery. Ecco un esempio utilizzando jQuery solo per accedere all'elemento e quindi "normale" JavaScript per impostare il gestore:

// Wrapper in order not to add unnecceary variables to the global namespace 
(function(){ 
    var link = $("a.clickyGoal1")[0]; 
    var oldOnClick = link.onclick; 
    link.onclick = function(e) { 
    $("p.goal1").append("trial button click goal is fired"); 
    oldOnClick(e); 
    } 
})(); 
+0

E a volte , dovrai conservare la variabile 'this' all'interno della vecchia funzione, quindi la soluzione è fare' oldOnClick.call (link, e) '. – TautrimasPajarskas

1
$(function() { 
     $("a.whatever").removeAttr('onclick').click(function(e) { 
      e.preventDefault(); 
      var text = $(this).text(); 
      var cls = this.className.split(' ')[1].split('clickyGoal')[1]; 
      $('p.goal' + cls).fadeOut(500,function() { 
       $(this).html(text+' button fired '+cls).fadeIn(500,function() { 
        alert(text); 
       }); 
      }); 
     }); 
    }); 
Problemi correlati