2013-04-17 9 views
22

Ist es möglich, changereignis über ein checkbox mit javascript/jquery auszulösen?jquery trigger change event auf checkbox

So etwas wie dies (I triggerChange auf einen Klick ausgeführt werden):

<label><input type="checkbox" id="chk"/>Label for chk</label> 

<script> 
function triggerChange(){ 
    $("#chk").trigger("change"); 
} 
</script> 

Wenn ich den obigen Code ich diesen Fehler ausführen: "Trigger ist keine Funktion".

+2

Natürlich ist es möglich. Wahrscheinlich haben Sie vergessen, jQuery einzubinden. – VisioN

+0

Ich glaube, Sie würden sich für diese Frage interessieren: http://StackOverflow.com/Questions/10159214/Why-does-dynamically-changing-a-Checkbox-not-trigger-a-form-change-event Don Vergiss nicht, auf einen $ (Dokument) .ready Kontext gesetzt zu werden! –

+0

Es klingt wie '$' gibt etwas zurück, das kein jQuery-Objekt ist. Was bedeutet, dass $ nicht jQuery ist? Beachten Sie außerdem, dass durch das Auslösen des Änderungsereignisses nur die Ereignishandler für Änderungen ausgeführt werden. Dadurch wird der Status des Kontrollkästchens nicht geändert. –

Antwort

15

Das trigger is not a function Fehlermeldung zeigt etwas anderes im Spiel ist. Gemäß dieser Frage SO:

What happens when a jQuery selector wasn't found?

no.good.at.coding sagt:

Do note however that you must ensure that selector is a jQuery object! Otherwise, you could get an error indicating that "trigger is not a function".

Es ist wahrscheinlich, dass Sie jQuery vergessen haben?


Wie für Ihre Implementierung, sollten Sie gut sein, wie Sie es verwenden. Aber trigger sollte verwendet werden, um Ereignismethoden für Elemente auszulösen, die bereits über jQuery angehängt wurden. Überprüfen Sie meine Demo-out:

Fiddle:
Mit Click-Ereignis: http://jsfiddle.net/fS4R5/1/
Ohne Click-Ereignis: http://jsfiddle.net/fS4R5/2/

HTML:

<label><input type="checkbox" id="chk"/>Label for chk</label> 

JS:

function triggerChange(){ 
    $("#chk").trigger("change"); 
} 

$("#chk").change(function() { 
    alert("triggered!"); 
}); 

triggerChange(); 
+0

Wenn nicht angehängt, wird der Browser keine * Ausnahme auslösen, "Trigger ist keine Funktion" *. jQuery ist darauf abgestimmt. – VisioN

+0

Danke, habe meine Antwort mit Details bezüglich der Ausnahme aktualisiert. – Jace

+0

Ich bin nicht an Klickereignis interessiert. Ich habe meine Gründe, den Klick nicht zu verwenden. Ich möchte das Änderungsereignis auslösen, ohne auf das Kontrollkästchen zu klicken. –

4

In jQuery können Sie normalerweise ein Ereignis auslösen, indem Sie seine eventhandler-Methode ohne Funktionsparameter aufrufen.

Zum Beispiel ein Klick-Handler kann als solche zugewiesen werden:

$('#mything').click(function(e){dostuff});

das Click-Ereignis an sich kann einfach durch Ausführen ausgelöst werden: $('#mything').click();

Ich vermute, dies kann für jeden getan werden existierendes Ereignis in jQuery.

+2

Sie können es auch mit '.trigger (" click ")' aufrufen. Es ist nichts falsch daran. – VisioN

+0

Ich bin nicht an Klickereignis interessiert. Ich habe meine Gründe, den Klick nicht zu verwenden. Ich möchte das Änderungsereignis auslösen, ohne auf das Kontrollkästchen zu klicken. –

+0

Nun, "Klick" war nur ein Beispiel. Sie können es genauso gut durch die Funktion 'ändern' ersetzen. Als Referenz: http://api.jquery.com/change/ –

1

Ich denke, die bevorzugte Methode seit 1.9.1 ist 'on'. Besonders, wenn Sie dynamisch hinzugefügte Checkboxen verwenden.

Sagen Sie bitte ein div mit id = ‚divCOntent‘ haben und es ist eine Checkbox mit id = ‚cballaut‘, könnten Sie dies tun

$('#divcontent').on('click', '#cballaut', function (e) { 
        alert(this.checked); 
       }); 
+0

Das kaum die Frage beantworten. – VisioN

0

Verwenden Sie Prop-Methode.

$('#myCheck').prop('checked', true); 
$('#myCheck').prop('checked', false); 
+0

Dies löst kein Änderungsereignis aus. – xaviert