2011-09-01 76 views
0

是否有方法來設置綁定,優先?jQuery如何設置綁定順序

我有一個鏈接,像這樣:

<a href="" class="popItUp" data-track"stuff"> </a> 

popItUp結合採取在彈出的網址和開放。

數據軌道是用於發送事件跟蹤數據的另一個綁定。

問題: popItUp返回false,並且數據軌道綁定永遠不會被觸發。有沒有辦法總是使jQuery數據跟蹤運行,因爲它總是會返回true?

感謝

代碼

// Mixpanel Click Tracking 
$('[data-track]').live('click', function() { 
    console.log('track it please'); 
}); 

$('.popItUp').popupWindow({height:300,width:600,centerBrowser:1}); 

popUpWindow是一個插件:http://swip.codylindley.com/popupWindowDemo.html

+2

你如何約束它?請告訴我們你的代碼。 – SLaks

+0

@Slaks,在Q – AnApprentice

+1

中更新綁定我希望在'data-track「stuff中省略=的事實是一個複製粘貼錯誤。 – Blazemonger

回答

2

如果popItUp處理程序首先被綁定,並且如果它returns false那麼data-track binding將不會被調用。您需要首先綁定data-track binding,如果您想給它更高的優先級而不是popItUp所做的。

看着你編輯的問題,data-track binding是使用live完成的,它適用於事件冒泡機制。如果popItUp處理程序returns false那麼它不會工作。也許你可以嘗試使用e.preventDefault();的錨,而不是在popItUp處理程序中返回false來防止默認行爲。

+0

這就是這種情況,我用console.log確認...問題用我正在使用的代碼更新。思考? – AnApprentice

+1

看看我編輯的答案。 – ShankarSangoli

+0

我喜歡那樣,這很有道理。任何想法如何我可以添加e.preventDefault();以插件取代返回false。它沒有一個電子變種 – AnApprentice

4

而不是返回假的,爲什麼不能簡單的阻止默認動作?

$('.popItUp').click(function(e) 
{ 
     e.preventDefault(); 

     // Do Stuff 
}); 

這樣,事件只是沒有取消,它只是沒有執行默認操作。

+0

我可以做到這一點,但它會打破所有其他沒有點擊跟蹤屬性的彈出窗口。我不明白爲什麼數據軌道的綁定可以先運行,然後轉到popitUp並讓它返回false而不會被黑客入侵? – AnApprentice

+0

防止默認行爲幾乎不是黑客;這將是正確的做事方式。 'return false'的含義比你賦予它更多的意義,特別是如果它毀了你的事件模型。 – Tejs

+0

確實如此,但考慮到它是在插件中,不必爲了維護而亂搞插件 – AnApprentice

2

live通過捕捉冒泡到<body>標籤的事件來工作。

因此,直接添加到元素的任何處理程序將在live處理程序之前運行。
調用stopPropagation()(或return false)內部直接處理程序將防止它冒泡,因此live將不會捕獲它。