如何通过事件对象从originalEvent传递数据?

时间:2019-05-17 20:12:25

标签: javascript jquery arrays events mouseevent

我需要通过事件对象传递originalEvent: MouseEvent { ... }。通常您可以这样做:

$('#name').trigger({
  type: 'mousedown',
  clientX: 115,
  clientY: 20
);

不幸的是,以下操作无效:

$('#name').trigger({
  type: 'mousedown',
  clientX: 115,
  clientY: 20,
  originalEvent: MouseEvent {
    isTrusted: true,
    clientX: 115,
    clientY: 20,
    layerX: 115,
    layerY: 20,
    pageX: 115,
    pageY: 20,
    screenX: 115,
    screenY: 20,
    x: 115,
    y: 20
  },
  pageX: 115,
  pageY: 20
});

错误:

  

SyntaxError:意外令牌'{'。应该以'}'结尾的对象文字。

1 个答案:

答案 0 :(得分:1)

这主要是语法问题。您需要使用new关键字来调用constructor of MouseEvent。您还需要提供第一个参数作为引发的MouseEvent的类型,然后第二个参数是包含事件属性的对象。在下面的示例中,我使用了click,但是可以很容易地更改它。

还请注意,isTrusted是一个只读属性,您无法通过编程方式进行设置。

$('#name').on('mousedown', function(e) {
  console.log(e.originalEvent);
}); 

$('#name').trigger({
  type: 'mousedown',
  clientX: 115,
  clientY: 20,
  originalEvent: new MouseEvent('click', {
    clientX: 115,
    clientY: 20,
    layerX: 115,
    layerY: 20,
    pageX: 115,
    pageY: 20,
    screenX: 115,
    screenY: 20,
    x: 115,
    y: 20
  }),
  pageX: 115,
  pageY: 20
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button id="name">Name</button>