Javascript 如何准确地传递jQuery';什么是触发器?
根据他们的API(),您应该可以这样做:Javascript 如何准确地传递jQuery';什么是触发器?,javascript,jquery,html,Javascript,Jquery,Html,根据他们的API(),您应该可以这样做: $("body").trigger({ type:"logged", user:"foo", pass:"bar" }); 但是,我尝试了下面的几个示例,如果我通过trigger()调用它,数据就永远不会传递 您似乎缺少事件类型 $("body").trigger("click", { type:"logged", user:"foo", pass:"bar" }); 这就是
$("body").trigger({
type:"logged",
user:"foo",
pass:"bar"
});
但是,我尝试了下面的几个示例,如果我通过trigger()
调用它,数据就永远不会传递
您似乎缺少事件类型
$("body").trigger("click", {
type:"logged",
user:"foo",
pass:"bar"
});
这就是我使用触发器的方式,它对我有效:
$("body").bind('someEvent', function (e, arg1, arg2) {
alert('arg1: ' + arg1);
alert('arg2: ' + arg2);
});
$("body").trigger('someEvent', ['arg1_text', 'arg2_text']);
您正在检查
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
,您没有使用它,下面是相关文档
你想要的是更像
this.resize = function(event) {
if (event.test1) {
console.log(event.test1)
console.log(event.test2)
console.log(event.test3)
}
}
请注意,即使您定义了data
属性,它也不会覆盖event.data
属性,因为jQuery在内部保护该属性,因此这将失败
$(element).trigger({
type : 'click',
data : 'test' // never passed
});
这是为了防止jQuery提供的事件.data
行为被覆盖
换句话说,您将事件.data
与在trigger()
$(“#logo”).trigger('myEvent',“Hello!”)中传递任意数据混淆了;
$(“#logo”)。在('myEvent',(e,data)=>{
console.log(如数据);//顺便说一句,jQuery的事件处理系统并不是为javascript类和实例而设计的,而是为DOM元素而设计的,您用实际的节点试过了吗?正如没有人回答的那样,我会尝试。event.data
在您的示例中总是未定义的,它用于完全不同的事情,在事件处理程序中传递数据。您使用触发器传递任意数据,您只需检查该数据,而不是事件。数据
我可以调用触发器
,用于自定义javascript对象。当您执行$(您的对象)时,打开(“blah”)
,jQuery将向自定义对象添加必要的内容。如果您尝试调整窗口大小,它不会是未定义的。好吧,您做错了,我添加了一个答案,试图解释为什么在每种情况下都设置了类型。
$('#logo').trigger('myEvent', "Hello!");
$('#logo').on('myEvent',(e, data) => {
console.log(e.data); // <--- this is undefined
console.log(data); // <--- data === "Hello!"
});