Pergunta

Estou tentando disparar eventos personalizados em elementos DOM e passar funções anônimas a serem executadas quando o evento é disparado (usando jQuery).Então, algo assim:

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

Portanto, clicar em "algum-botão" deve acionar "custom_event" em "algum-dom" e fazer com que a função anônima que passei no gatilho seja executada.Direita?Mas o navegador diz que o retorno de chamada é indefinido no evento personalizado.Estou fazendo algo errado?Não é permitido passar funções anônimas como argumentos de gatilho?Obrigado

Foi útil?

Solução

Você precisa passar vários argumentos extras para trigger() como um Array. (Um argumento pode ser passado sem o Array.)

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

Exemplo: http://jsfiddle.net/NRSJ2/

Outras dicas

Você pode fazer assim:

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

Aqui está a prova de conceito .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top