2013-12-20 4 views
7

ich auf den Knopf klicken möchten 2 ein Click-Ereignis auf die Schaltfläche 1.Ein Klick auf eine Schaltfläche Ereignis auslösen Sie auf eine andere

jedoch auslösen, wenn ich folgendes versuchen, passiert nichts, wenn auf # klicken 2: nein Alarm für # 1 oder # 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/

Außerdem, wenn ich die # 2 Alarm vor dem Trigger setzen, ich am Ende mit eine Endlosschleife.

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

Warum funktioniert dies nicht wie erwartet?


UPDATE:

Ich sollte deutlich gemacht: das ursprüngliche Ereignis übergeben werden müssen. Im Wesentlichen versuchen wir zu tun, was here getan, aber mit delegierten Ereignisse

Antwort

9

Verwenden

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

oder

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

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

statt

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

JSFIDDLE DEMO

Lesen Sie mehr über jquery .trigger() here

+1

Die OP ist bereits vorbei einen Klick ' Event-Objekt zu "Trigger", ich glaube nicht, dass dies das Problem ist. –

+0

Nein, wir müssen das orig-Ereignis übergeben, sorry, das wurde nicht klar gemacht – Yarin

+0

@RoryMcCrossan - oder 'event.type' kann auch verwendet werden, um es auszulösen. – Krishna

4

Um richtig einen delegierten Ereignis auslösen Sie haben ein Ereignisobjekt zu erstellen und zu trigger()

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

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

FIDDLE

Auf diese Weise passieren Sie lösen das Ereignis tatsächlich aus Element, an das es gebunden war, und übergibt den Selektor, den der delegierte Ereignishandler filtert, als event.target, so dass er genau so ausgelöst wird, als würde das Element tatsächlich geklickt.

Oder Sie können das ursprüngliche Ereignis verwenden, wenn Sie das Ereignis ändern.Ziel

$('#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- Danke, das hat auch für mich funktioniert. – Yarin

3

Wenn Sie anrufen müssen klicken Falle einer Taste dann ist Syntax wie unten

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

Selektor -> welches Tag der Veranstaltung, die Sie

Ereignis ausgelöst müssen -> welches Ereignis Sie müssen

In Ihrem Fall feuern Sie folgende eine Zeile ändern müssen

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

hier müssen Sie Ereignis von E wie Click-Ereignis, wählen Sie Ereignis passieren, usw.

so ist Lösung diese Linie mit einem der folgenden Zeile ersetzen

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

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