Pregunta

Estoy intentando activar eventos personalizados en elementos DOM y pasar funciones anónimas para que se ejecuten cuando se activa el evento (usando jQuery).Algo como esto:

$(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");
    }
});

Por lo tanto, hacer clic en "algún-botón" debería activar "custom_event" en "algún-dom" y provocar que se ejecute la función anónima que pasé en el activador.¿Correcto?Pero el navegador dice que la devolución de llamada no está definida en el evento personalizado.¿Estoy haciendo algo mal?¿No se permite pasar funciones anónimas como argumentos de activación?Gracias

¿Fue útil?

Solución

Debe pasar varios argumentos adicionales a trigger() como una matriz. (Se puede pasar un argumento sin la matriz).

$(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
});

Ejemplo: http://jsfiddle.net/NRSJ2/

Otros consejos

Puede hacerlo así:

$('#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]);
});

Aquí está la prueba de concepto .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top