2013-08-20 79 views
0

是否可以通过自定义事件对象触发某个对象上的事件? 即带自定义事件对象的触发事件处理程序

$('#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); 
}); 

一点背景:

在我的实例元素2是元素1的但具有不同的位置几乎相同的克隆。当单击元素2时,该点击应该被转发到元素1。

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

它确实不是在我的示例中,只需执行深度克隆并包含事件处理函数即可,因为目标属性设置不正确。

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

回答

0

我不明白你的良好背景的逻辑,但你可以从trigger jQuery的尝试。您可以触发重用事件对象的事件:

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

$('#Element2').click(function(event){ 

    event.something = "Something"; 

    $('#Element1').trigger(event); 
}); 
+0

我应该正确阅读文档 - 我没有发现触发器功能的第二次重载。 – DJL

0

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

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

演示:Fiddle

相关问题