2014-05-08 40 views
0

假設您將處理程序綁定到bind()on(),並指定數據(如{ color : "red" })。稍後,情況會發生變化,您希望以{ color : "blue"}觸發事件。有沒有辦法改變這種情況,而無需刪除處理程序unbind()off()並重新綁定新的數據對象?有沒有辦法在使用jQuery綁定事件後更改eventData?

+1

我認爲你必須明確你想說什麼或發佈你的代碼的一部分。 –

+0

您可以使用.css()或.addClass()重寫 – fauverism

回答

4

沒有,有沒有辦法改變這種狀況,EVENTDATA傳入以後不能改變,因爲這是一點,數據鎖定的事件處理程序

var data = {test : 'test'}; 

$('element').on('click', data, function(e) { 
    // e.data will always be {test : 'test'} 
}); 

data = {test: 'foo'}; // doesn't matter 

FIDDLE

原因裏面爲這是EVENTDATA的目的是爲其中將通常使用的封閉件的情況下,像

for (var i = 0; i < 5; i++) { 
    $("button").eq(i).on("click", { value: i }, function(event) { 
     var i = event.data.value; 

     // now i can be accessed with event.data.value without extra closures 
    }); 
} 

從而改變數據的唯一途徑是重新綁定EV如果需要更改數據,或者最好使用其他方法,並且提到觸發事件處理函數,並且如果您使用jQuery來執行此操作,則可以通過使用trigger()中的事件對象來傳遞數據

$('element').on('click', function(event) { 
    var data = event.custom; 
}); 

$('element').trigger({ 
    type: 'click', 
    custom: {color: 'red'} 
}); 

$('element').trigger({ 
    type: 'click', 
    custom: {color: 'blue'} 
}); 

FIDDLE

1

你可以在獲取數據的方法傳遞? 即

var data = {test : 'test'}; 
var DataGetter = function() { return data;}; 
$('element').on('click', DataGetter, function(e) { 
var data=e.data(); 
}); 
data.test='Hello'; 
data = {hello: 'world'}; 
0

我發現了另一個我認爲會有所幫助的問題。

jQuery find events handlers registered with an object

看起來你看看jQuery的變量直接看到發生了什麼被張貼:

jQuery._data(elem, "events"); 

看起來這是不是安全可靠的,我不知道,如果你可以改變但它確實讓你看到它。

我認爲只是刪除事件然後添加新事件才更好。

相關問題