在JQuery .trigger上传递参数


82

我正在使用JQuery触发器,但不确定在我的情况下传递参数的正确语法是什么。这是我打电话的地方:

$('#'+controlName).trigger(event);

这是我正在做事件绑定的地方:

$(window).on('onPartialRendered', onPartialRendered);

这是我的事件处理程序:

var onPartialRendered = function () {

    .....
};

一切正常,直到我尝试传递参数。按照我的示例,正​​确的方法是什么?


是的,我尝试使用那里的trigger(event,['Param1','Param2'])语法传递参数,但没有成功
user517406 2013年

onPartialRendered的签名中没有任何参数。应该是onPartialRendered = function(e, p1, p2)
火箭Hazmat

@ user517406您如何尝试传递无效的参数?
2013年

@ user517406尝试在jsfiddle.net中发布一些代码供我们使用。
Edper

Answers:


151

第一个参数始终是带有事件名称的字符串,下一个参数是附加数据:

.trigger('foo', [1, 2]);

.on('foo', function(event, one, two) { ... });

特别感谢Rocket Hazmat

例:

var controller = {
  listen: function (event, json, string) {}
};

$('body').trigger('this_works', [{data: [1, 2, 3]}, 'something']);

$('body').on('this_works', function (event, json, string) {
  controller.listen(event, json, string);
});

远程部分:

请不要使用这种方式。网络中有很多有关此问题的文章。这会花费很多时间,并在网络中产生不必要的流量。请使用这种方式:

var template = $('#templates #example_template').detach();
var clone = template.clone();
clone.find('.some_field').val('new_data');
clone.attr('id', null);
$('table tbody').append(clone);

11
不完全的。 .trigger只需要两个参数。您需要传递参数数组(或对象)。
火箭Hazmat

如果我想像示例中那样将事件绑定与事件处理程序分开,正确的语法是什么?
user517406 2013年

您能举一个语法示例,使用这种语法不起作用:事件绑定$(window).on('onPartialRendered',onPartialRendered(p1,p2)); 事件处理程序var onPartialRendered =函数(p1,p2){...}
user517406 2013年

2
@ user517406这完全是将函数引用作为事件处理程序传递的错误方法。将参数添加到定义函数的位置。var onPartialRendered = function (event,one,two) {
凯文B

2
只需将触发器更改为此:$('body')。trigger({type:'this_works',data:[1,2,3],message:'something'});。处理程序仍然可以只包含function(event)并通过声明event.data和event.message获取参数。
林肯2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.