2013-12-20 624 views
7

我想点击按钮2按钮触发click事件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'); 
}); 

http://jsfiddle.net/8RnBf/7/

而且,如果我把#2警报触发前,我结束了一个无限循环。

http://jsfiddle.net/8RnBf/6/

为什么这个工作不正常?


UPDATE:

我应该已经明确:原始事件必须被传递。从本质上说,我们正在试图做的是什么事here,但委托事件

回答

9

使用

$('#button-1').trigger('click'); 

$('#button-1').trigger(e.type); 

http://jsfiddle.net/8RnBf/17/

,而不是

$('#button-1').trigger(e); 

JSFIDDLE DEMO

阅读有关jQuery的.trigger() here

+1

的OP已经通过点击'事件'对象'触发器',我不认为这是问题。 –

+0

不,我们需要通过orig事件,对不起,这个不明确 – Yarin

+0

@RoryMcCrossan - 或'event.type'也可以用来触发它。 – Krishna

4

要正确触发,你必须创建一个事件对象,并把它传递给trigger()

$('#container').on("click", '#button-2', function(e){ 
    var event = jQuery.Event(e.type); 
    event.target = $('#button-1').get(0); 

    $('#container').trigger(event); 
}); 

FIDDLE

这样一个委托事件你实际上在触发事件元素绑定,通过委托事件处理程序将筛选器选择的选择器作为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); 
}); 
+0

@ adeneo-谢谢,这些也为我工作。 – Yarin

3

当你需要调用点击任何按钮的情况下则语法如下

$('selector').trigger(event); 

选择 - >你需要火

事件,标签的事件 - >哪些事件你需要着火

在你的情况下,你需要改变以下一行

$('#button-1').trigger(e); 

在这里,你需要通过Ë像click事件,选择事件的事件等

这样的解决方案是与任何以下行替换此行

$('#button-1').trigger(e.type); 

$('#button-1').trigger("click");