2010-03-10 22 views
3

我正在使用ajax的應用程序的PHP工作。在所有我想要得到的jQuery劫持我添加類ajaxlink的鏈接直接進入該鏈接的鏈接在jQuery中處理多個點擊事件,其中重要的順序

<a class="someclass ajaxlink" href="somelocation1">goto1</a> 
<a class="someclass ajaxlink" href="somelocation2">goto2</a> 
<a class="someclass ajaxlink" href="somelocation3">goto1</a> 

的JavaScript看起來像這樣

$('.ajax-link').click(function(){get link with ajax}); 

如果用戶已啓用JavaScript他將通過ajax獲取頁面。一個特定的我有一個多頁,所以我有相同的功能,爲所有頁面生成相同的鏈接。

現在我的問題是在一個頁面中的一個鏈接,我想做一些不同的事情。它必須在ajax頁面返回成功時觸發另一個函數。現在我有這樣的代碼。

<div class"specialclass"> 
    <a class="someclass ajaxlink" href="somelocation1">goto1</a> 
    <a class="someclass ajaxlink" href="somelocation2">goto2</a> 
    <a class="someclass ajaxlink" href="somelocation3">goto1</a> 

    <a class="someclass ajaxlink special-1" href="somelocation">goto</a> 
    <a class="someclass ajaxlink special-2" href="somelocation">goto</a> 
    <a class="someclass ajaxlink special-3" href="somelocation">goto</a> 
</div> 

$('.ajax-link').click(function(){get link with ajax}); 
$('.specialclass .special-1, 
    .specialclass .special-2, 
    .specialclass .special-3').click(function(){get link with ajax}); 

此設置,因爲我想要在正常情況下執行在同一容器中的普通鏈接。只有一個我想添加另一個點擊事件的特殊鏈接。我認爲我不能將此事件添加到正常的點擊事件中,因爲它只需在應用程序的特定頁面中觸發。在所有其他頁面上,它將是不必要的代碼。

然而,這個設置產生了錯誤,因爲特殊類的點擊首先被觸發,然後是ajaxlink類。這必須切換,只有在ajaxlink返回成功時纔會觸發。

任何人都有這個想法。

回答

3

你可以重構你的正常點擊功能進行的全過程,並做到這一點:

var normalClick=function(){/*get link with ajax*/}; 

$('.ajax-link').click(normalClick); 
$('.specialClass').click(
    function(){ 
    normalClick(); 
    /* special click code */ 
    } 
); 
+0

謝謝,我覺得這個解決方案將工作的偉大。這樣,我可以做更多的Ajax完成後,我會試試看。 – 2010-03-10 14:27:25

+0

我對此有疑問。使用這種方法,如果鏈接同時具有ajax-link類和spcialclass,normalclick事件將被觸發兩次? – 2010-03-10 14:37:58

+1

我加了event.stopImmediatePropagation();到specialClass,現在工作正常,謝謝! – 2010-03-10 14:52:38