1

我在<select>元素上有这样一个事件处理程序:

select.on("change", null, {
    tbody: $("#tbody"),
    colspan: 5,
    onLoad: onLoadHandler,
}, onSelectChange);

在我通过对象onSelectChange以这种方式获取它们:event.data

event.data.tbody,
event.data.colspan,
event.data.onLoad

在我的代码的其他地方,我想触发我的元素.on("change")的事件,select我需要提供相同的参数:

select.trigger("change", [$("#tbody"),  5, onLoadHandler]); // <- how to pass them as event.data?

我的问题是如何将这些参数传递给,trigger以便我可以在onSelectChange处理程序中以相同的方式使用它们:

event.data.tbody,
event.data.colspan,
event.data.onLoad
4

2 回答 2

1

如果您希望能够执行此操作,则必须更改处理程序。在您的处理程序中,不仅仅是使用event.data,而是使用从附加参数中提取event.data或从附加参数中提取的内容:

function onSelectChange(event, triggeredData)
{
    var data = triggeredData || event.data;
    // do stuff with data.tbody or whatever here
}
select.on("change", null, {
    tbody: $("#tbody"),
    colspan: 5,
    onLoad: onLoadHandler,
}, onSelectChange);

然后您可以使用触发器发送不同的数据:

select.trigger("change", {tbody:$("#tbody"), colspan:5, onLoad:onLoadHandler});

event.data在用户操作触发事件时使用。

于 2013-09-30T16:18:55.217 回答
1

你不能改变 event.data,但你可以像人们说的那样使用额外的参数。或者您可以传递事件参数:

select.on('change', function(event) { console.log(event.tbody, event.colspan, event.onLoad) })
select.trigger({type:'change', tbody:'val', colspan:'val', onLoad:'val'})

顺便说一句,通过触发事件来调用函数是不好的做法。

于 2013-09-30T16:24:19.390 回答