如何在jQuery中使用.trigger()方法将eventData参数传递给.on()?

时间:2013-09-30 16:11:19

标签: javascript jquery

我在<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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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'})
顺便说一句,通过触发事件来调用函数是不好的做法。