我在jQuery中使用.delegate()
處理回調函數時遇到了一些問題。此設置使用2個文件 - 其中$ B是創建的,另一個是簡單的$(doc).ready文件。jQuery代表回調
我有一個SVG文件與<g>
標籤一堆(50+)我需要跟蹤,當我點擊,側翻,部署等而不是附加的功能到<g>
節點,代表看起來像一個更清潔的選擇。
但是,我遇到了一個問題,我認爲這是我在JavaScript方面相對缺乏的知識。
下面是我的主要就緒()文件中的設置:
$C.Events.onStation({
click : function(e){
console.log(e)
return false;
},
mouseenter : function(e){
return false;
},
mouseleave : function(e){
return false;
}
})
這工作正常。一切都穿過,裏面等我的$ B.Events對象:
Events : new function(){
var _station = function(obj){
// delegate the events to the primary SVG node
for(var type in obj){
$(City.Map.node).delegate('g', type, function(){
obj[type]()
})
}
return {
onStation : _station
}
// others taken out for relevance
}()
現在,有了這個,如果我只是在obj[type]
傳入另一個函數進行包裝,而不是,它工作正常。唯一的問題是我需要做一些事前處理(即與事件數據對象混淆)以及將所有return false
的代碼移動到代理代碼中,而不是把我的其他文件弄糟。
那麼如何從jQuery的.delegate()
函數中的回調處理函數中執行的第一個代碼塊獲取函數?
編輯迴應
我認爲這是朝着正確方向邁出的一步。我有一種感覺,它有JS的本質,但不一定是邏輯。這就是爲什麼我有時候討厭Javascript。
該解決方案的問題在於它將基元傳遞給通用構建器函數。我需要存儲並返回一個可執行的函數。我試過的幾件事情都沒有成功。這裏有許多事情我試過一個例子:
var _station = function(events){
var _funcs = {}
var _selection = null;
var create = function(f){
return function(){ return f() }
}
for(var t in events){
_funcs[t] = create(t, events[t])
}
console.log(_funcs)
// delegate the events to the primary SVG node
for(var type in events){
$('#stations', Bart.Map.node).delegate('g', type, function(e){
_funcs[type](e)
e.stopPropagation()
})
}
}
當我log(_funcs[type])
它回來的功能,但我不能執行它爲我的生活。
這封閉的東西殺了我。
我不太清楚,但我認爲你的問題是你正在循環中創建一個閉包。請看看[這個問題](http:// stackoverflow。com/questions/750486/javascript-closure-inside-loops-simple-practical-example),讓我們知道這是否解決了這個問題。 – 2012-01-10 10:10:11
是的,我認爲這與此有關,但我無法獲得適合我使用的代碼。我更新了原文,以反映。謝謝菲利克斯,我們將其添加爲書籤以供將來使用。 – Phix 2012-01-10 19:40:41