Frage

Ich versuche, benutzerdefinierte Ereignisse für DOM-Elemente auszulösen und anonyme Funktionen zu übergeben, die ausgeführt werden, wenn das Ereignis ausgelöst wird (mithilfe von jQuery).Also so etwas wie folgt:

$(some-dom).live("custom_event", function(evtObj, data, callback) {
//do some stuff
callback();
});

$(some-button).click(function() {
    $(some-dom).trigger("custom_event", some_data, function () {
        alert("this is my anonymous function passed as event data");
    }
});

Wenn Sie also auf "some-button" klicken, sollte "custom_event" auf "some-dom" ausgelöst werden und die anonyme Funktion, die ich an den Trigger übergeben habe, ausgeführt werden.Richtig?Der Browser sagt jedoch, dass der Rückruf im benutzerdefinierten Ereignis nicht definiert ist.Mache ich etwas falsch?Ist das Übergeben anonymer Funktionen als Triggerargumente nicht zulässig?Danke

War es hilfreich?

Lösung

Sie müssen mehrere zusätzliche Argumente als Array an trigger() übergeben. (Ein Argument kann ohne das Array übergeben werden.)

$(some-dom).click(function() {      //  v-----pass extra args in an Array
    $(some-dom).trigger("custom_event", [some_data, function () {
        alert("this is my anonymous function passed as event data");
    }]);
 //  ^------Array
});

Beispiel: http://jsfiddle.net/NRSJ2/

Andere Tipps

Sie können dies folgendermaßen tun:

$('#testelement').live("test_event", function(e, myCallback) {
    myCallback();
});

$('#clickme').click(function(e){
    e.preventDefault();

    var myFunc = function () {
        alert("this is my anonymous function passed as event data");
    };

    $('#testelement').trigger('test_event', [myFunc]);
});

Hier ist der Proof of Concept .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top