2010-05-06 27 views
6

Önceden bir onclick olayına sahip olan href'lere jquery click olayı eklemek istiyorum. Aşağıdaki örnekte, önce hard kodlanmış onclick olayı tetiklenir. Bunu nasıl tersine çevirebilirim?onclick olaylarının sırası

<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> 

cevap

6

Sen ancak o jQuery ile mümkün olup olmadığından emin değilim, orijinal olay işleyicisi olsun kendi ile değiştirin ve sonra özgün işleyicisi çağırmak gerekir.

// 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

Ve bazen Burada sadece bir öğesine erişmek için ve daha sonra JavaScript işleyicisi "normal" ayarlamak için jQuery kullanarak bir örnektir , eski işlev içindeki 'bu' değişkeni korumanız gerekir, böylece çözüm' oldOnClick.call (bağlantı, e) 'yapmaktır. – 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); 
       }); 
      }); 
     }); 
    });