为什么使用jQuery trigger()时事件参数没有值?

3

我尝试使用触发器事件。 如果我独立用手触发事件,没有问题,并且事件参数内容包含我需要的所有字段。 如果我使用jQuery的trigger(),一切正常,但是事件参数几乎什么都没有。

<div id="dragDiv">
    <button id='dragButton' >tap</button>
</div>

$("#dragButton")
   .hammer({
        // options...
   })
   .bind("drag", doCall);

function doCall(ev){
    console.log(ev);
}

$('#dragButton').trigger("drag");

结果

v.Event {type: "drag", timeStamp: 1357286124612, jQuery18306904058358632028: true, isTrigger: true, exclusive: undefined…}
currentTarget: <button>
data: null
delegateTarget: <button>
exclusive: undefined
handleObj: Object
isTrigger: true
jQuery18306904058358632028: true
namespace: ""
namespace_re: null
result: undefined
target: <button>
timeStamp: 1357286124612
type: "drag"
__proto__: Object

但我需要:

v.Event {type: "drag", originalEvent: MouseEvent, position: Object, direction: "right", distance: 22.825424421026653}
angle: -28.810793742973058
currentTarget: <button>
data: null
delegateTarget: <button>
direction: "right"
distance: 22.825424421026653
distanceX: 20
distanceY: -11
exclusive: undefined
handleObj: Object
isTrigger: true
jQuery18306904058358632028: true
namespace: ""
namespace_re: null
originalEvent: MouseEvent
position: Object
result: undefined
target: <button>
timeStamp: 1357286139160
touches: Array[1]
type: "drag"
__proto__: Object

4
就是这样。例如,如果您程序化地触发了点击事件,则此时鼠标实际上没有特定的位置,因此事件对象不包括鼠标坐标。我认为在这里您无法做太多事情。在这种情况下也是类似的,因为您没有将任何元素向任何方向拖动,因此处理程序无法知道要使用哪些值来填充事件对象。 - Felix Kling
2个回答

0
为了安全起见,当您使用JavaScript触发事件时,它将与用户触发事件时注册的方式不同。您会注意到在输出中有一个

标签。
isTrigger: true

触发事件自己操作与用户操作时总是不同的。

0

这是正确的行为,因为缺失的属性是用户操作相关的,或者是指触发事件的原始用户操作,显然在通过jQuery触发事件的情况下未定义。

你有什么期望?如果你期望这些值能自动填充,那是不可能的,因为它们需要一个条件。如果你知道在事件中需要哪些值,或者可以在触发事件时指定它们,请以这种方式传递:

var event = jQuery.Event("drag");
event.missingproperty = "myvalue";
event.anothermissingproperty = "anothervalue";
$("selector").trigger(event);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接