2016-08-15 11 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

あなたが委任した親がどのようにパフォーマンスに影響を与えるかについてのレポートがあるかどうか知っていますか?動的な要素の真上にある静的な親を使用してドキュメントを使用するのと同じですか?私は親指のルールとしてそれを理解するだけです – NachoDawg

+1

@ NachoDawg私はしませんが、それは簡単にテストすることができます - http://jsperf.com。私はその違いが小さいと思います。おそらく数十ミリ秒ですが、最適なパフォーマンスを得るために最適化しない理由はありません。違いは、イベントが捕らえられる前にバブルしなければならない要素の数だけです。 –

関連する問題