我想点击按钮2来触发按钮1上的点击事件。
但是,当我尝试以下操作时,点击#2时没有任何反应:#1或#2没有警报。
HTML:
<div id="container">
<button id="button-1">Button 1</button>
<button id="button-2">Button 2</button>
</div>
JS:
$('#container').on( "click", '#button-1', function(e){
alert('CLICKED 1');
});
$('#container').on( "click", '#button-2', function(e){
$('#button-1').trigger(e);
alert('CLICKED 2');
});
此外,如果我在触发前放置#2警报,我最终会得到一个无限循环。
为什么这不按预期工作?
更新
我应该说清楚:原始事件必须通过。从本质上讲,我们正在尝试做here所做的事情,但是使用委托事件
答案 0 :(得分:10)
使用
$('#button-1').trigger('click');
或
$('#button-1').trigger(e.type);
而不是
$('#button-1').trigger(e);
<强> JSFIDDLE DEMO 强>
了解jquery .trigger() here
答案 1 :(得分:4)
要正确触发委派事件,您必须创建一个事件对象并将其传递给trigger()
$('#container').on( "click", '#button-2', function(e){
var event = jQuery.Event(e.type);
event.target = $('#button-1').get(0);
$('#container').trigger(event);
});
这样你实际上是在它绑定的元素上触发事件,传递委托事件处理程序将作为event.target
过滤的选择器,因此它将像元素一样触发实际点击了。
如果您更改event.target
,也可以使用原始活动$('#container').on( "click", '#button-1', function(e){
alert('CLICKED 1');
});
$('#container').on( "click", '#button-2', function(e){
e.target = $('#button-1').get(0);
$('#container').trigger(e);
});
答案 2 :(得分:3)
当您需要调用任何按钮的click事件时,语法如下
$('selector').trigger(event);
选择器 - &gt;你需要解雇哪个标签事件
事件 - &gt;你需要解雇哪个事件
在您的情况下,您需要更改以下一行
$('#button-1').trigger(e);
这里你需要传递e事件,如点击事件,选择事件等。
所以解决方案是将此行替换为以下任何一行
$('#button-1').trigger(e.type);
$('#button-1').trigger("click");