4

我試圖觸發DOM元素上的自定義事件並傳遞匿名函數以在觸發事件(使用jQuery)時執行。因此,像這樣:將匿名函數傳遞給Javascript/jQuery中的自定義事件觸發器

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

所以點擊「一些按鈕」應觸發「一些-DOM」,「CUSTOM_EVENT」,並導致我在扳機傳遞到執行的匿名函數。對?但瀏覽器表示回調在自定義事件中未定義。難道我做錯了什麼?傳遞匿名函數作爲觸發器參數不允許?謝謝

回答

7

您需要將多個額外參數作爲數組傳遞給trigger()(有一種說法,而不數組進行傳遞。)

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

例子:http://jsfiddle.net/NRSJ2/

+1

你是對的!我怎麼錯過了!謝謝:) – Jay

+0

@Jayraj&@ user113716我做的和答案中顯示的一樣,但是我在控制檯上得到錯誤:'NS_ERROR_XPC_SECURITY_MANAGER_VETO: alert(「這是我作爲事件數據傳遞的匿名函數」);'爲什麼?我只改變了我用'on'而不是'live'來註冊自定義事件 – Amogh

+0

沒有看到一些示例代碼就不可能說出什麼問題。也許你可以嘗試創建一個新的問題?另外,鑑於這個答案已經超過4年了,jQuery中可能發生了API更改。 – Jay

0

你可以這樣說:

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

這裏是proof of concept

+0

好的,使用命名函數也可以。我想用簡單的匿名函數,但沒有意識到我必須在數組中傳遞參數。謝謝。 :) – Jay

相關問題