2016-08-15 172 views
1

我有一個ID爲Strike的按鈕,但JQUERY事件似乎不起作用?這個事件在這裏工作以前,但只有當DOM加載時存在按鈕。爲什麼我的委託事件處理程序不工作?

dom.el('Strike').onclick = strikeSkill; 

現在我有我的按鈕動態生成,所以稍後會生成「罷工」按鈕。所以上面的代碼不再起作用,因爲Strike = Null

我正在使用Jquery .on函數,填充了我的參數,但現在當我點擊罷工按鈕時,什麼也沒有發生。沒有攻擊。爲什麼是這樣?

function strikeSkill() { 
    activeCheck(); 
    if (upgradeActive == true){ 
     radialSelector(strike); 
    } 
    if (upgradeActive == false){ 
     HitCalc(player.cc, monster.cc); 
     actor.expCounter(player.cc); 
     actor.balanceCounter(player.cc, monster.cc); 
    } 
}; 

$('#Strike').on('click', '#Strike', function() { 
    strikeSkill(); 
}); 
+0

http://api.jquery.com/delegate/將此用於動態生成的元素。 – g9m29

+0

如何動態添加按鈕?通過jQuery? –

回答

3

您當前的事件處理程序正在尋找一個#Strike元素#Strike,這是不正確的(更不用說是無效的HTML)。

可以通過使用靜態父元素爲主要選擇解決此:

$(document).on('click', '#Strike', function(){ 
    strikeSkill(); 
}); 

在我用document的例子中,然而,對於最佳的性能應該是最近的靜態父元素到#Strike它是DOM加載時可用。

+0

您是否知道是否有任何關於您選擇委派哪位家長的報告,影響其表現?比如使用Document vs使用動態元素正上方的靜態父元素?我只明白它作爲一個經驗法則 – NachoDawg

+1

@NachoDawg我不知道,但它可以很容易地測試 - http://jsperf.com。我會想象它們之間的差別很小;大概幾十毫秒 - 但沒有理由不優化以獲得最佳性能。不同之處在於事件在被捕獲之前必須冒泡的元素數量。 –

相關問題