可以使用jquery触发器设置event.data吗
使用jQuery可以使用jquery触发器设置event.data吗,jquery,Jquery,使用jQuery.on()可以传递一个可选参数来设置事件数据。你也能用扳机吗 我希望我没有误解您的意思,但您是说用触发器方法传递附加数据吗 $(app.Model).trigger("foo", additionalData); 在别的地方 $(app.Model).on("foo", callback); var callback = function(event, additionalData) { console.log(additionalData); } 请注意,如果使用t
.on()
可以传递一个可选参数来设置事件数据。你也能用扳机吗 我希望我没有误解您的意思,但您是说用触发器
方法传递附加数据吗
$(app.Model).trigger("foo", additionalData);
在别的地方
$(app.Model).on("foo", callback);
var callback = function(event, additionalData) {
console.log(additionalData);
}
请注意,如果使用trigger
传递附加数据,则回调函数中的第一个参数始终是您正在触发的实际事件
我在括号中使用的app.Model
是应该触发事件并侦听该事件的对象。将其视为一种名称空间。您可以始终使用document
、任何DOM选择器甚至您喜欢的对象,只要确保触发器
和上的都必须使用相同的对象(即,从DOM临时删除的DOM元素容易出错)。您可以这样做:-
示例
//Create a new jQuery.Event object without the "new" operator.
var e = jQuery.Event("click");
// trigger an artificial click event
jQuery("body").trigger( e );
您也可以使用相同的方法传递event.data。请参阅此是。文件说:
.trigger(eventType[,extraParameters])
注意我们在这里传递的额外参数与.bind()
方法的eventData
参数之间的差异。这两种机制都是将信息传递给事件处理程序的机制,但是.trigger()
的extraParameters
参数允许在触发事件时确定信息,而eventData
参数传递给.bind())
要求在绑定处理程序时已计算信息
我知道一个解决办法,我们可以用这个
$("button").on("click", function(event) {
event.data = $(this).data('events'); // get the data value
alert(event.data); //use your data as you want
});
//Now set the data value and trigger
$("button").data('events','youreventsvalue').trigger("click");
这里是jQuery站点中的一个,您可以看到触发器
函数的声明:.trigger(eventType[,extraParameters])
extraParameters
必须是一个数组或单个对象,并且允许您使用参数[1+](参数[0]等于事件对象)获取这些对象
下面是一个例子:
$('#foo').bind('custom', function(event) {
if ( arguments.length > 1 ) {
$.each(arguments, function(i,arg){
alert("element " + i + " is " + arg);
})
}
});
$('#foo').trigger('custom', ['Custom', 'Event', { 'test' : 'attr from object' }, 123]);
据我所知,与原始版本定义的相同的dataObject
:
$('selector').on('eventName', dataObject , functionName)
使用`$('selector').trigger('eventName')时也将发送
您也可以传递参数(与答案中提到的其他参数一样),但这些参数将是附加参数(您仍将拥有在.on()
函数中设置的dataObject
。这是我采用的方法
$('#foo').on('click', { init: false }, function(e, data) {
data = data || e.data;
console.log(data.init); // will be true in the trigger, and false in the click.
})
.trigger('click', { init: true });
简短答复:
trigger()能否将数据传递给事件处理程序是(作为附加参数)
trigger()能否将数据直接传递到event.data对象否(只有打开()才能执行此操作)
长话短说
trigger()方法执行5项主要任务
它创建一个JQueryEventObject,其类型和可选名称空间为您提供的名称空间
它发送或发出特定类型的事件,该事件在DOM中向上传播,直到到达顶部或停止传播
它定义了该类型事件的事件处理程序的签名。
- 函数(事件){…}是默认值
它将事件作为第一个参数传递给这些处理程序
它(可选)将附加参数传递给事件的任何处理程序
- 函数(事件,附加参数){}
数字3和5对你来说是最重要和最相关的。由于您隐式定义了用于处理此事件的api,因此您希望与触发事件的方式保持一致,以便使用您的代码的人能够与他们使用代码的方式保持一致
示例1一致性
function Car(speed, tires, brakes) {
this.speed = speed;
this.tires = tires;
this.brakes = brakes;
}
Car.prototype.brake = function(amount) {
// You can do this (Event handler will have access to these parameters)
car.trigger('brake.car', [this.speed, this.brakes, this.tires, amount])
// Or this (Event handler will have access to these parameters)
car.trigger('brake.car', [this, amount])
// but try not to mix and match with the same event type
}
...
//This is the first way from above (choose one or the other, but don't mix and match).
passenger.on('brake.car', {person: passenger}, function(evt, carSpeed, carBrakes, carTires, brakeAmount){
if(brakeAmount > 50)
passenger.hangOnTight();
}
})
...
// This is the second way from above (choose one or the other, but don't mix and match).
passenger.on('brake.car', function(evt, car, brakeAmount){
if(brakeAmount > 50)
passenger.hangOnTight();
}
})
示例2下面是一个典型示例,显示了trigger()和on()
所以记住
- .trigger():如果需要,发出事件并一致定义参数2、3等
- .on():事件正在dom中冒泡。做一些事情,添加或使用事件数据,并使用额外的参数触发添加或不添加
- Tangent:如果您想为可以任意添加或删除的动态元素定义事件处理程序,使用jQuery非常容易。看看这个答案:
我花了一段时间才理解这背后的哲学。事件涉及两个实体:侦听器和调度程序。
event.data
字段仅用于侦听器。这有点像给电话号码指定一个名字:
$("(818)548-2733").on("incomingcall", null, "Mom", pickup);
你可以拿起电话,等对方告诉你她是你妈妈。或者您可以使用event.data
附加与此事件相关的额外信息
事件的调度程序端调用$.trigger
和$.triggerHandler
方法。这就是为什么他们不允许您指定事件.data
。相反,您可以使用它们的外部参数
参数。您可以这样做
$("pressedButton").on("click", function(event) {
var buttonID = $(this).data('buttonID');
alert(buttonID); // alerts 'save' string passed as an argument
});
$("pressedButton").data('buttonID','save').trigger("click");
<input id="btn" type="button" />
<input id="btn2" type="button" />
$("#btn").bind("click",function(e) {
var data2 = {type:"click",name:"Raptors",sport:"basketball"};
$("#btn2").trigger(data2);
});
$("#btn2").bind("click",function(e) {
console.log(e.name + " " + e.sport);
});
$(“#btn”).bind(“单击”,函数(e){
var data2={类型:“点击”,名称:“猛禽”,运动:“篮球”};
$(“#btn2”)。触发器(数据2);
});
$(“#btn2”).bind(“单击”,函数(e){
console.log(e.name+“”+e.sport);
});
这一点很好。值得一提的是,dataObject可以通过事件的数据属性访问。类似于函数foo(e){console.log(e.data)}+1,文档并没有真正提到如何访问这些额外的数据。您能用代码示例演示如何使用这种方法传递event.data吗?var e=jQuery.event(“click”);e、 data=“一个好数据”;jQuery(“body”)。触发器(e);这是这个问题的正确答案。其他的“答案”是黑客。但这不起作用<代码>e.数据
在到达
处理程序上的时未定义。这是有效的解决方案。使用它,这是最简单的方法;-)。。。而且是一种非常危险的方式。如果按下的按钮上已经有数据怎么办?这
$("pressedButton").on("click", function(event) {
var buttonID = $(this).data('buttonID');
alert(buttonID); // alerts 'save' string passed as an argument
});
$("pressedButton").data('buttonID','save').trigger("click");
<input id="btn" type="button" />
<input id="btn2" type="button" />
$("#btn").bind("click",function(e) {
var data2 = {type:"click",name:"Raptors",sport:"basketball"};
$("#btn2").trigger(data2);
});
$("#btn2").bind("click",function(e) {
console.log(e.name + " " + e.sport);
});