0

ハイとローを検索しましたが、解決策が見つかりませんでした。私はすべてを試しました..しかし、これを機能させることはできません。

注: ".on()" は使用できません。.live/.delegate のみをサポートする古いバージョンの jQuery を使用する

基本的に、私は非常に複雑なWebページを持っています..どこにでも飛んでいるイベントハンドラーがあります.. 偉大な。簡単だと思いました。

試した:

 jQuery('body').delegate('.not("#mainID #anotherID")','click', function(e){ 
    // do something
 })

 jQuery('body').delegate(':not(".class1 .class2")','click', function(e){ 
    // do something
 })

等...

そしてもっとたくさん..基本的に、これを機能させることはできません。私が何をしても、ページ全体がクリック可能です。

次のような単純なことをすると、うまくいきます。

 jQuery('body').delegate('#someID','click', function(e){ 
    // do something
 })

しかし、それは私が必要とするものではありません。基本的に、ページの小さなセクションである 2 つのサブセットを除いて、本文全体をクリックできるようにする必要があります。これは些細なことだと思いました..しかし、何らかの理由で、うまくいきません。

除外したい 2 つの項目は次のとおりです: id: mainID w/ クラス ".class1" id: anotherID w/ クラス ".class2"

別の注意: mainID は、ページの 2 つの別個のセクションである anotherID の外側にあります。両方のdiv。

4

1 に答える 1

2

イベント委任に関連するいくつかのことを指摘させてください。

  1. まず、.on()関数を使用します。これ.delegate()は非推奨です。

  2. 第二に、どちらが内側にあるか.class1 .class2が一致しますclass2class1

    jQuery('body').on('click', ':not(.class1, .class2)', function(e) { 
        // do something
    })
    

しかし、これも必要なものではありません

$(".class1, .class2").on('click', function() { return false; });

古いバージョンの jQuery を使用していて、何らかの理由でそれを変更できない場合は、.live()または通常の.click()ハンドラーを使用します。

$(".class1, .class2").click(function() { return false; });

ここで、 をクリックし.class1.class2も何も起こりません。ID 内の特定のもののみを選択する場合は、セレクターとしてclass使用できます。#mainID .class1または、古いイベント委任の場合:

jQuery('body').delegate(':not(.class1, .class2)','click', function(e){ 
    // do something
    // but this will execute on every where you click except .class1, .class2
})
于 2013-09-26T06:33:44.033 に答える