javascript - 有没有办法在使用 jQuery 绑定(bind)事件后更改 eventData?

标签 javascript jquery event-binding

假设您使用 bind()on() 将处理程序绑定(bind)到某个对象,并指定诸如 { color : "red"} 之类的数据>。后来,情况发生变化,您希望使用 { color : "blue"} 触发事件。有没有办法更改此设置,而无需使用 unbind()off() 删除处理程序并与新数据对象重新绑定(bind)?

最佳答案

不,没有办法改变这一点,传入的 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
   });
}

因此,更改数据的唯一方法是重新绑定(bind)事件,或者如果您需要更改数据,并且您提到触发事件处理程序,并且您正在使用 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

关于javascript - 有没有办法在使用 jQuery 绑定(bind)事件后更改 eventData?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23545194/

相关文章:

data-binding - Kendo UI - 如何使用 Kendo MVVM 绑定(bind)选中的属性(属性)并将复选框的单击事件处理到 viewModel

javascript - 使用公共(public) url 访问 Neo4J

javascript - 如何在根 webpack 文件夹之外进入?

javascript - 如何使用chart js或其他库绘制甘特图

javascript - 使用 .on() 绑定(bind)时如何获取对父级的引用

angular - 如何使用单击事件从父组件中的子组件刷新我的表格内容?

javascript - 如何使用leaflet中的OSRM match api来绘制路线?

javascript - 如果文本位于两个哈希标签之间,则突出显示文本 ##ccc## 文本 ##234##

javascript - 如何四舍五入谷歌图表中的百分比值

javascript - 有没有一种方法可以整合 jQuery 函数,这些函数在不同的类和 id 上执行相同的操作