2016-08-15 2 views
1

У меня есть кнопка с идентификатором 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

Вы случайно не знаете, есть ли какие-либо отчеты о том, каким родителем вы решили делегировать, влияет ли производительность? например, используя документ vs, используя статический родительский элемент непосредственно над динамическим элементом? Я понимаю это только как правило. – NachoDawg

+1

@NachoDawg Я этого не делаю, но его можно легко протестировать - http://jsperf.com. Я бы предположил, что разница крошечная; вероятно, десятки миллисекунд - но нет причин не оптимизировать для лучшей производительности. Разница заключается лишь в количестве элементов, которые событие должно пузыриться до того, как их поймают. –