【问题标题】:Getting the event target is not possible with trigger()使用 trigger() 无法获取事件目标
【发布时间】:2015-08-26 22:20:08
【问题描述】:

谁能帮我解释一下为什么我用 trigger() 调用它时无法获取事件目标?

我得到了这个 HTML:

<span class="test_span" onmouseover="Test()">
    test
</span>

还有这个 JQuery 代码:

function Test() {
    var target = window.event.target || window.event.srcElement;
    console.log(target);
}
$(".test_span").trigger('mouseover');

如果运行它我会得到错误:

未捕获的类型错误:无法读取未定义的属性“目标”

但是如果我用鼠标悬停元素,它会返回:

<span class="test_span" onmouseover="Test()">
    test
</span>

我该如何解决这个问题?我需要用触发器模拟点击并获取对象。 JSFIDDLE

【问题讨论】:

  • window.event 是 MSIE。使用var evt = e || window.event; 并使用onmouseover="Test(event)"&gt; 传入事件对象
  • jsfiddle.net/tusharj/36rx39t5/3 不要使用inline handlers

标签: javascript jquery


【解决方案1】:

不要使用inline 事件处理程序。使用on

查看代码中的内联 cmets。

HTML:

<span class="span_width"><!-- Remove onmouseover="Test()" -->
    test
</span>

Javascript:

// on mouseover of span_width
$('.span_width').on('mouseover', function (e) {
    // Use event object to get target
    console.log(e.target);
}).trigger('mouseover');
// Trigger mouseover event

演示:https://jsfiddle.net/tusharj/36rx39t5/3/

【讨论】:

  • 是的,这是一个不错的解决方案。但在我的情况下不起作用。关键是我有多个将调用 Test() 的对象,将调用 Test() 的对象是我的目标。在这种情况下,我现在必须准备好.span_width 是我想要的那个。你知道怎么做吗?我真的不能拥有这个:Test(event)
  • @Pierezzz 你可以使用$('.span_width, myOtherEl, oneMore').on('mouseover', ...
【解决方案2】:

试试这个

$('.span_width').on('mouseover', function(e) {
    var target = e.target || window.event.srcElement;
    console.log(target);
});

【讨论】:

    【解决方案3】:
    $(".test_span").mouseover(function(){
        var target = window.event.target || window.event.srcElement;    
        alert(target);
    });
    

    你可以试试这个,这个用起来很简单

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-07
      • 2019-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多