0

私は4つのパラメータを取るイベント委任プラグインを書いています:

  • context = 文字列セレクター
  • 子要素 = 文字列セレクター
  • イベント = 文字列
  • fn = 呼び出す関数

親がDOMに存在する場合、プラグインはイベントを子要素に委任する必要があります...

コンテキスト要素が子要素と同じ場合に問題が発生します。デリゲートは、渡された子がコンテキストの子であると想定しているため、機能しなくなりました。

失敗する入力の例を次に示します。

  • コンテキスト = "ul"
  • 子要素 = "ul.active"
  • イベント=「クリック」

$('ul').on('click', 'ul.active', fn())「ul.active」が「ul」と同じになる場合があるため、できません。

私が考えることができる1つの解決策は次のとおりです。

var $context = $('ul');
$(document).on('click', 'ul.active', function(e){
   var $target = $(e.target);
   if($target.is($context) || $target.closest($context).length){
      fn()
   }
})

委任イベントをバインドする前に「子==コンテキスト」のチェックを行い、適切に状況にバインドする方が良いのではないでしょうか?

4

1 に答える 1

0

これが優れた解決策であると言っているわけではありませんが、それが私が考えることができる唯一の方法は、$(document)

var parent = 'ul';
var child = 'ul.active';

$(parent).on('click', child, function() {
    console.log('ul.active clicked')
})​;

$(child)
    .filter(function(){
        return $(this).parents(parent).length == 0;
    })
    .on('click', function() {
        console.log('ul.active clicked')
    });​

あなたはおそらく条件をより良くすることができます-私が思うようにタイプするだけです:)

于 2012-06-19T16:19:31.083 に答える