2017-01-21 9 views
2

jQueryを初めて使用しました。イベントの委任に関する質問があります。 は、ここで以下のjavascript本から一連のコードですjqueryでのイベント委任の追加

HTML:

<ul class="accordion"> 
    <li> 
     <button class="accordion-control">Classics</button> 
     <div class="accordion-panel"> 
     <p>If you ...</p> 
     </div> 
    </li> 
    <li> 
     <button class="accordion-control">The Flower Series</button> 
     <div class="accordion-panel"> 
     <p>Take your ...</p> 
     </div> 
    </li> 
    <li> 
     <button class="accordion-control">Salt o' The Sea</button> 
     <div class="accordion-panel"> 
     <p>Ahoy! ....</p> 
     </div> 
    </li> 
    </ul> 

のjQuery:

$('.accordion').on('click', '.accordion-control', function(e){ 
    e.preventDefault();     
    $(this).next('.accordion-panel')    
     .not(':animated')     
     .slideToggle();      
}); 

我々はすでに '.accordion' を選択しているので、私は思っていました、なぜ「.accordion-control」を選択する必要があるのでしょうか?そして、私は式が$(selector).on(event,function)であるべきだと考えていたので、イベント後に別のセレクタがありますか?

+1

https://learn.jquery.com/: $('accordion-control').click(function (event) { //your code });

詳細については、あなたが見ることができる:、あなたもそのため$(selector).click(function)を使用することができます(あなたのaccordion-conrtol年代が最初から存在していることを意味)イベント/イベント委任/ –

答えて

1

最初のaccordionは祖先を指します。バインディングは、イベントにあります。その1つは、accordion-controlという子孫です。 祖先は、子孫がまだ存在しない場合に使用されます(たとえば、accordion-controlがスクリプトを使用して作成され、ページの読み込み(HTML内)から存在しない場合) - 存在しない要素にイベントをバインドできません。 http://api.jquery.com/on/

+0

Gotcha!しかし、jQueryの代わりにjavascriptを使用する場合は、「accordion-control」が必要ですか? – jessica

+0

あなた、もう一度見てください(それがあなたを助けたら私の答えを受け入れてください):-) – ItayB