你究竟如何传递jQuery触发器的数据?

时间:2014-07-28 20:09:21

标签: javascript jquery html

根据他们的API(http://api.jquery.com/trigger/),您应该可以这样做:

    $("body").trigger({
      type:"logged",
      user:"foo",
      pass:"bar"
    });

但是,我尝试了下面的一些示例,如果我通过trigger()调用数据,数据永远不会通过...

http://jsfiddle.net/totszwai/XExe9/

4 个答案:

答案 0 :(得分:1)

您正在检查event.data,这在您的所有示例中都未定义

this.resize = function(event) {
    if (event.data) {
        console.log("with data " + event.type + " : " + event.data.toString());    
    } else {
        console.log("without data " + event.type);
    }
}

event.data是将数据传递给事件处理程序

$('element').on('click', {'event' : 'data', 'goes' : 'here'}, function(e) {
    console.log(e.data.goes);  // here
});

^那是event.data,你没有使用它,这里是那个文档

<强> http://api.jquery.com/event.data/

你想要的更像是

this.resize = function(event) {
    if (event.test1) {
        console.log(event.test1)
        console.log(event.test2)
        console.log(event.test3)
    }
}

FIDDLE

请注意,即使您定义了data属性,它也不会覆盖event.data属性,因为它受jQuery内部保护,所以这将失败

$(element).trigger({
     type : 'click',
     data : 'test' // never passed
});

这是为了保持jQuery提供的event.data行为被覆盖。

换句话说,您在event.data

中传递任意数据让trigger()感到困惑

答案 1 :(得分:0)

好像你错过了eventType

$("body").trigger("click", {
    type:"logged",
    user:"foo",
    pass:"bar"
});

答案 2 :(得分:0)

这就是我使用trigger的方式,它对我有用:

$("body").bind('someEvent', function (e, arg1, arg2) {
    alert('arg1: ' + arg1);
    alert('arg2: ' + arg2);
});

$("body").trigger('someEvent', ['arg1_text', 'arg2_text']);

答案 3 :(得分:0)

$('#logo').trigger('myEvent', "Hello!");

$('#logo').on('myEvent',(e, data) => {
   console.log(e.data); // <--- this is undefined
   console.log(data);  // <--- data === "Hello!"
});

在回调中使用第二个参数。不是e.data的{​​{1}}