假设您将处理程序绑定到bind()
或on()
的某个位置,并指定{ color : "red" }
等数据。稍后,情况会发生变化,您希望使用{ color : "blue"}
触发事件。有没有办法在不使用unbind()
或off()
移除处理程序并使用新数据对象重新绑定的情况下更改此内容?
答案 0 :(得分: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
原因是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
});
}
因此,更改数据的唯一方法是重新绑定事件,或者如果需要更改数据,最好使用其他方法,并提及触发事件处理程序,如果使用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'}
});
答案 1 :(得分: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'};
答案 2 :(得分:0)
我发现了另一个我认为有用的问题。
jQuery find events handlers registered with an object
看起来你直接查看jQuery变量以查看已发布的内容:
jQuery._data( elem, "events" );
看起来这不安全,我不知道你是否可以改变它,但它确实让你查看它。
我认为最好删除该事件,然后添加新事件。