2013-12-20 515 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");