如何在单击另一个元素时触发元素的单击功能?

时间:2014-06-06 09:50:34

标签: javascript jquery

也许是一个奇怪的问题,但我无法弄清楚。

我们说我有一个链接,当点击时,它会做一些事情。应用程序工作时,会为其单击方法分配不同的事件。让我们说这个链接是:

<a id="link1">Link 1</a>

现在,让我们说另一个链接,例如:

<a id="link2">Link 2</a>

有没有办法,很简单,告诉Link 2点击Link 1的点击事件/功能?

$('#link2').click(function(){
    //find out what Link 1 does when clicked and do the same
});

我知道有不同的方法让它工作,例如简单地为link1和link2分配相同的事件。如果我想在上面做什么的语法,我对理论观点更感兴趣。

4 个答案:

答案 0 :(得分:2)

小提琴:http://jsfiddle.net/MrZzV/

这并不像您预期​​的那样简单,因为没有明确的方法将上下文传递给click事件,但是您可以使用jQuery.data

代码:

$('#link2').click(function(){
    jQuery.data( $('#link1')[0] , "caller", this );
    $('#link1').click();
    jQuery.data( $('#link1')[0] , "caller", false );
});


$('#link1').click(function(){

   if(jQuery.data( $('#link1')[0] , "caller") === false)
   {
       caller = this;  

   }
   else
   {
           var caller = jQuery.data( $('#link1')[0] , "caller");

   }
   console.log(caller);


});

正如您所看到的,来电者确实不同取决于您点击的人

更新:对代码的小修复,udpated fiddle

答案 1 :(得分:1)

$('#link2').click(function(){
    $('#link1').click();
});

<强> Reference

答案 2 :(得分:0)

&#34;有没有办法,很简单,告诉Link 2做任何Link 1做的事情?&#34;

是的。您可以使用.click()或:

触发绑定到第一个链接的点击事件
$('#link2').click(function() {
    $('#link1').trigger('click');
});

UPD:最初不清楚是否需要在事件执行中保留上下文,上面提供的解决方案不会执行相同的操作(如果它们是#link2元素。因此,如果发生以下事件,请在#link2点击您仍然#link1红色和#link2不变:

$('#link1').click(function() {
    $(this).css('color', '#f00');
});

但是,如果您想在最初点击的元素中保留事件的上下文并让其将thise.target视为#link2,您可以执行以下操作:< / p>

$('#link2').click(function() {
    var e = $._data($('#link1')[0], 'events');
    e.click[0].handler.apply(this, arguments);
});

...它不是非常紧凑,清晰,灵活和可靠,所以很好的旧多元素选择将完成工作而不会使事情过于复杂:

$('#link1, #link2').click(function() {
    $(this).css('color', '#f00');
});

DEMO: http://jsfiddle.net/uRgxe/

答案 3 :(得分:0)

我们可以在选择器中选择两个链接

$("#link1,#link2").click(function()
{
      //write common code
});