2012-04-12 54 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