2013-12-20 1 views
7

Я хочу, чтобы нажать на кнопку 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'); 
}); 

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

ОП уже проходит щелчок ' событие 'to' trigger', я не думаю, что это проблема. –

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

здесь вам нужно пройти событие е как события нажатия, выберите событие и т.д.

так решение заменить эту строку с любой из следующей строки

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

$('#button-1').trigger("click"); 
Смежные вопросы