bind()
假设您使用or将处理程序绑定到某物on()
并指定数据,例如{ color : "red" }
. 稍后,情况发生变化,您希望使用 触发事件{ color : "blue"}
。有没有办法在不使用unbind()
or删除处理程序off()
并重新绑定新数据对象的情况下更改它?
问问题
754 次
3 回答
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'}
});
于 2014-05-08T14:53:09.917 回答
1
你可以传入一个获取数据的方法吗?IE
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'};
于 2014-05-08T14:57:49.233 回答
0
我发现了另一个我认为会有所帮助的问题。
看起来您直接查看 jQuery 变量以查看已发布的内容:
jQuery._data( elem, "events" );
看起来这并不安全,我不知道您是否可以更改它,但它确实可以让您查看它。
我认为最好删除事件然后添加新事件。
于 2014-05-08T14:58:09.193 回答