如果你想使用的.on()
動態版本,那麼你需要使用此表單:
$(staticParentSelector).on('click', '.displayBig', fn);
staticParentSelector
必須是指向您的動態父級的選擇器c對象,並在您運行上述jQuery來安裝事件處理程序時出現,並且它必須是在安裝事件處理程序之後未被銷燬並重新創建的對象。與第二個選擇器匹配的對象(我將調用動態選擇器)不需要初始存在,並且可以在將來隨時創建。
在最壞的情況下,它可能是這樣的:
$(document).on('click', '.displayBig', fn);
由於document
對象滿足所有的靜態父的標準。但是,如果選擇離您的實際動態對象更近的靜態父級,並且您沒有爲所有動態事件使用document
對象,則事件的性能會更好。
所以,如果你有HTML這樣的:
<div id="container">
<a href="images/large_4.jpg" class="displayBig" data="gallery0">
<div id="magnify">dsfsfdsfs</div>
</a>
</div>
然後,你可以使用的.on()
這樣一個動態的版本:
$("#container").on('click', '.displayBig', fn);
的方式.on()
工作動態版本是,它將單個事件處理程序綁定到靜態對象。然後,當有人點擊其中一個動態對象時,對象上沒有直接的事件處理程序用於點擊,因此點擊會通過祖先對象起泡。當事件到達具有事件處理程序的staticParent對象時,它會看到已安裝動態事件處理程序,並將發起該事件的對象與動態選擇器進行比較。如果它們匹配,它將觸發事件處理程序。如果它們不匹配,則不會觸發事件。
這個問題是我需要事件冒泡。 「如果省略選擇符或爲null,則事件處理程序稱爲直接或直接綁定。每次在選定元素上發生事件時都會調用處理程序,無論它是直接發生在元素上,還是直接發生在元素上或來自子節點的氣泡(內部)元素 提供選擇器時,事件處理程序稱爲委派。當事件直接發生在綁定元素上時,不會調用該處理程序,而只會爲與選擇器匹配的後代(內部元素)調用該處理程序。 jQuery將事件從事件目標直到元素「 – Tom 2012-04-12 06:49:52