也许是一个奇怪的问题,但我无法弄清楚。
我们说我有一个链接,当点击时,它会做一些事情。应用程序工作时,会为其单击方法分配不同的事件。让我们说这个链接是:
<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分配相同的事件。如果我想在上面做什么的语法,我对理论观点更感兴趣。
答案 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');
});
但是,如果您想在最初点击的元素中保留事件的上下文并让其将this
和e.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');
});
答案 3 :(得分:0)
我们可以在选择器中选择两个链接
$("#link1,#link2").click(function()
{
//write common code
});