Javascript 如何激发元素';当单击另一个元素时,是否使用“单击”功能?

Javascript 如何激发元素';当单击另一个元素时,是否使用“单击”功能?,javascript,jquery,Javascript,Jquery,也许是个奇怪的问题,但我想不出来 比如说,我有一个链接,当点击它时,它会做一些事情。当应用程序运行时,会为其单击方法分配不同的事件。假设这个链接是: <a id="link1">Link 1</a> 我知道有不同的方法来实现这一点,比如简单地将相同的事件分配给link1和link2。从理论上讲,我更感兴趣的是,如果我想在上面做的事情有语法的话。“有没有一种简单的方法,让链接2做链接1做的事情?” 有。您可以使用触发绑定到第一个链接的单击事件。单击()或: $('#lin

也许是个奇怪的问题,但我想不出来

比如说,我有一个链接,当点击它时,它会做一些事情。当应用程序运行时,会为其单击方法分配不同的事件。假设这个链接是:

<a id="link1">Link 1</a>
我知道有不同的方法来实现这一点,比如简单地将相同的事件分配给link1和link2。从理论上讲,我更感兴趣的是,如果我想在上面做的事情有语法的话。

“有没有一种简单的方法,让链接2做链接1做的事情?”

有。您可以使用
触发绑定到第一个链接的单击事件。单击()
或:

$('#link2').click(function() {
    $('#link1').trigger('click');
});
UPD:由于最初不清楚是否需要在事件执行中保留上下文,因此上面提供的解决方案不会对
#link2
元素执行相同的操作(如果需要)。因此,如果发生如下事件,在
#link2
上单击,您仍然会得到
#link1
红色和
#link2
不变:

$('#link1').click(function() {
    $(this).css('color', '#f00');
});
但是,如果您想在最初单击的元素中保留事件的上下文,并让它知道
e.target
作为
#link2
,您可以这样做:

$('#link2').click(function() {
    var e = $._data($('#link1')[0], 'events');
    e.click[0].handler.apply(this, arguments);
});
。。。这不是非常紧凑、清晰、灵活和可靠,因此良好的旧多元素选择将在不过度复杂的情况下完成工作:

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

小提琴:

这并不像您预期的那么简单,因为没有明确的方法将上下文传递给单击事件,但是您可以使用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);


});
正如您将看到的,调用方确实不同,这取决于您单击的是谁


更新:对代码进行了小修改,使用了小提琴

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

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

您使用的是什么jquery版本?尽管您知道OP只是想触发另一个元素的事件,但为什么要发布此消息?此外,较新的版本使用._数据,这就是为什么我要求使用jQuery版本。在他的评论中,他要求发布一个考虑上下文的解决方案。如果你们想分享一个更准确地回答问题的答案(考虑到上下文),那就太好了——不管怎样,我只是展示了一个简单的例子,说明了如何传递上下文,我不知道。_data,我不是jquery专家。非常抱歉:)谢谢你,帕特里克,非常感谢。我一定会玩弄这种方法。
$('#link2').click(function(){
    $('#link1').click();
});
$('#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);


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