2010-05-06 13 views
6

Chcę dodać zdarzenie click jquery do href, które już mają zdarzenie onclick. W poniższym przykładzie zdarzenie hardcoded onclick zostanie wyzwolone jako pierwsze. Jak mogę to odwrócić?kolejność zdarzeń 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> 

Odpowiedz

6

Musisz dostać oryginalną obsługi zdarzeń, wymień go na własną rękę, a następnie wywołać oryginalnego obsługi, jednak nie jestem pewien, czy jest to możliwe z jQuery. Oto przykład przy użyciu jQuery tylko uzyskać dostęp do elementu, a następnie "normalny" obsługa JavaScript, żeby ustawić Handler:

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

a czasami , musisz zachować zmienną 'this' wewnątrz starej funkcji, więc rozwiązaniem jest wykonanie' 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); 
       }); 
      }); 
     }); 
    }); 
Powiązane problemy