单击一个按钮可在另一个按钮上触发单击事件
我想点击按钮2来触发按钮1上的点击事件。
但是,当我尝试以下操作时,单击#2时没有任何反应:#1或#2没有警报。
HTML:
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'); });
http://jsfiddle.net/8RnBf/7/
而且,如果我在触发器之前放置#2警报,我最终会得到一个无限循环。
http://jsfiddle.net/8RnBf/6/
为什么这不按预期工作?
更新:
我应该说清楚:原始事件必须通过。 从本质上讲,我们正在尝试做这里所做的事情,但是要委托事件
使用
$('#button-1').trigger('click');
要么
$('#button-1').trigger(e.type);
代替
$('#button-1').trigger(e);
JSFIDDLE DEMO
在这里阅读jquery .trigger()
要正确触发委托事件,您必须创建一个事件对象并将其传递给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); });
当您需要调用任何按钮的click事件时,语法如下
$('selector').trigger(event);
selector – >你需要触发哪个标签的事件
event – >你需要触发的事件
在您的情况下,您需要更改以下一行
$('#button-1').trigger(e);
在这里你需要传递事件,如点击事件,选择事件等。
所以解决方案是使用以下任何一行替换此行
$('#button-1').trigger(e.type); $('#button-1').trigger("click");