【问题标题】:Trigger event handler with custom event object使用自定义事件对象触发事件处理程序
【发布时间】:2013-08-20 15:04:53
【问题描述】:

是否可以使用自定义事件对象触发某个对象上的事件? 即

$('#Element1').click(function(event){
    console.log('Element1 clicked', event);
}

$('#Element2').click(function(event)
{ //handle click on one element

  //optionally modify the event object
  event.target=Something;

  //Trigger the event handler(s) on some other element using modified event object
  $('#Element1').click(event);
});

一点背景:

在我的例子中,Element2 是 Element1 的几乎相同的克隆,但位置不同。单击 Element2 时,应将单击转发到 Element1。

我已经有代码可以根据单击 Element2 的哪个子级来识别 Element1 的正确子级,但是元素 1 的子级上的 click 事件处理程序要求正确设置 pageX 和 pageY 属性,并且 .click() 省略了这些完全属性。

在我的示例中,它足以进行深度克隆并包含事件处理程序,因为目标属性设置不正确。

在我的实例中,一个解决方法是让克隆元素保留对原始元素(以及每个子元素)的引用,并让处理程序检查该引用,但是,我更喜欢处理程序不知道的解决方案克隆过程 - 尤其是因为有很多处理程序需要修改!

【问题讨论】:

    标签: javascript jquery javascript-events


    【解决方案1】:

    我不太了解您的背景逻辑,但您可以尝试使用 jQuery 中的 trigger。您可以重用事件对象来触发事件:

    $('#Element1').click(function(event){
        console.log('Element1 clicked with changed event: ' + event.something);
    });
    
    $('#Element2').click(function(event){ 
    
        event.something = "Something";
    
        $('#Element1').trigger(event);
    });
    

    【讨论】:

    • 我应该正确阅读文档 - 我没有发现触发函数的第二次重载。
    【解决方案2】:

    你可以试试.trigger() 它接受一个事件对象作为参数

    $('#Element1').trigger(event);
    

    演示:Fiddle

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多