Kontrollkästchen Ereignis-Listener aktivieren

75

Vor kurzem habe ich mit der Chrome Plugin API gearbeitet und möchte ein Plugin entwickeln, das mir das Leben bei der Verwaltung einer Website erleichtert.

Jetzt möchte ich ein Ereignis auslösen, wenn ein bestimmtes Kontrollkästchen aktiviert ist. Da diese Website mir nicht gehört, kann ich den Code nicht ändern, daher verwende ich die Chrome-API. Eines der Hauptprobleme ist, dass es keinen Namen gibt, sondern einen Namen. Ich habe mich gefragt, ob ich die Funktion auslösen könnte, wenn das bestimmte Kontrollkästchen mit dem Namen aktiviert ist.

Oliver Kucharzewski
quelle

Antworten:

153

Angenommen, Sie verwenden dieses Markup:

<input type="checkbox" name="checkbox">

Ohne jQuery

Verwenden des jQuery-ähnlichen querySelector .

var checkbox = document.querySelector("input[name=checkbox]");

checkbox.addEventListener( 'change', function() {
    if(this.checked) {
        // Checkbox is checked..
    } else {
        // Checkbox is not checked..
    }
});

Mit jQuery

$('input[name=checkbox]').change(function(){
    if($(this).is(':checked')) {
        // Checkbox is checked..
    } else {
        // Checkbox is not checked..
    }
});
Thordarson
quelle
6
Using the jQuery-like querySelector... mmm, ist kein "jQuery-like" (fühle mich versucht, abzustimmen)
JFK
3
Was ich damit gemeint habe ist, dass jQuery die Verwendung von Abfrageselektoren in Javascript weit verbreitet hat. Bevor sie vorbeikamen, war das Auswählen und Finden von Elementen ein Problem.
Thordarson
2
Verwenden Sie immer addEventListeneranstelle von direkten Ereignissen wie onchangefür weitere Kompatibilität.
Beytarovski
2
@dino onchange wird von allen Browsern unterstützt und es gibt absolut keinen Unterschied zwischen on [event] und addEventListener, außer Anwendungsfällen, die möglicherweise zu Ihrem spezifischen Projekt passen oder nicht. Bitte sagen Sie mir, inwiefern meine Antwort eine Ablehnung verdient. Beantwortet es nicht die Frage?
Thordarson
7
@thordarson onchangefügt keinen Ereignis-Listener hinzu. Es ersetzt das vorhandene. Dies bedeutet, dass Sie dieses Objekt nur mit einem Ereignis blockieren und es möglicherweise nicht für weitere Plugins oder Skripte geeignet ist, die mit demselben Objekt arbeiten. Wenn ich einen "Chat starten" -Button habe, möchte ich, dass er von anderen Themen, Plugins oder Skripten eingebunden wird.
Beytarovski
47

Da ich das jQueryTag im OP nicht sehe , gibt es hier nur eine Javascript- Option:

document.addEventListener("DOMContentLoaded", function (event) {
    var _selector = document.querySelector('input[name=myCheckbox]');
    _selector.addEventListener('change', function (event) {
        if (_selector.checked) {
            // do something if checked
        } else {
            // do something else otherwise
        }
    });
});

Siehe JSFIDDLE

JFK
quelle
Sie haben Recht, und ich habe Ihre Antwort vor langer Zeit positiv bewertet. Ich habe eine kostenlose jQuery-Option mit der querySelector-Methode hinzugefügt.
Thordarson
Warum haben Sie den Unterstrich zur Variablen _selector hinzugefügt?
Linus
@ Linus: kein technischer Grund. Ich glaube, zum Zeitpunkt der Antwort habe ich mit einem Kunden gearbeitet, bei dem alle privaten Variablen innerhalb einer Funktion mit Unterstrichen begannen, und ich glaube, ich habe unbewusst auf die gleiche Weise geantwortet. Es funktioniert gleich ohne sie jsfiddle.net/13pog9L8 Bitte beachten Sie, dass das Wichtigste bei der Verwendung oder Nichtunterstreichung von Variablen die Konsistenz im gesamten Code (Ihrer oder der Firma, für die Sie arbeiten) ist
JFK
1
Sie können tun: if (event.target.checked) {// etwas tun} else {// etwas tun}
SabU
1
@ SabU gibt es tausend Möglichkeiten, das gleiche zu tun;)
JFK
12

Wenn Sie ein Kontrollkästchen in Ihrem HTML haben, wie:

<input id="conducted" type = "checkbox" name="party" value="0">

Wenn Sie diesem Kontrollkästchen mithilfe von Javascript einen EventListener hinzufügen möchten, können Sie in der zugehörigen JS-Datei Folgendes tun:

checkbox = document.getElementById('conducted');

checkbox.addEventListener('change', e => {

    if(e.target.checked){
        //do something
    }

});
SabU
quelle