2012-04-12 78 views
4

我想在1.7.2上使用jquery方法,但我遇到了麻煩。jquery方法不工作

我用這

$(function(){ 
$("a").on("click",'.displayBig', function(e) { 
    e.preventDefault(); 
    alert('foo'); 
})}); 
<a href="images/large_4.jpg" class="displayBig" data="gallery0"><div id="magnify">dsfsfdsfs</div></a>​ 

看來,我的選擇是行不通的。

我在這裏創建了一個jsfiddle。

http://jsfiddle.net/BQDvM/

謝謝你們。

回答

7

如果你想使用的.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對象時,它會看到已安裝動態事件處理程序,並將發起該事件的對象與動態選擇器進行比較。如果它們匹配,它將觸發事件處理程序。如果它們不匹配,則不會觸發事件。

3

或者,如果你想一定要只能選擇一個標籤,你可以使用:

$(function(){ 
    $('a.displayBig').on("click", function(e) { 
     e.preventDefault(); 
     alert('foo'); 
    }); 
}); 

http://jsfiddle.net/BQDvM/2/

+0

這個問題是我需要事件冒泡。 「如果省略選擇符或爲null,則事件處理程序稱爲直接或直接綁定。每次在選定元素上發生事件時都會調用處理程序,無論它是直接發生在元素上,還是直接發生在元素上或來自子節點的氣泡(內部)元素 提供選擇器時,事件處理程序稱爲委派。當事件直接發生在綁定元素上時,不會調用該處理程序,而只會爲與選擇器匹配的後代(內部元素)調用該處理程序。 jQuery將事件從事件目標直到元素「 – Tom 2012-04-12 06:49:52