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
});