2012-08-08 94 views
0

我正在使用Yii框架。我想要无限滚动我的内容(图片)。这部分工作正常。我唯一的问题是我必须有一个脚本才能对我的图像产生一些效果(比如让它们变大并在点击时显示一些文字)。JQUERY infinit滚动,将脚本应用到新加载的元素

<?php 

    Yii::app()->clientScript->registerScript('overlayimage',' 
     $(".overlay").hide(); 

     $(".box").click(function() { 

      if($(this).hasClass("col5")) 
      { 
       $(this).removeClass("col5").addClass("col3").fadeIn(400).find(".overlay").fadeOut(400); 
       $(".items").masonry("reload"); 
       $(this).clearQueue(); 
      } 

      else 
      { 
       $(".items").find(".col5").removeClass("col5").addClass("col3").fadeIn(400).find(".overlay").fadeOut(400); 
       $(this).removeClass("col3").addClass("col5").fadeIn(400).find(".overlay").fadeIn(400); 
       $(".items").masonry("reload"); 
       $(this).clearQueue(); 
      } 

     }) 
    ',CClientScript::POS_READY); 
?> 

然而,当有无穷远滚动(脚本是CClientScript::POS_LOAD),脚本不列入新添加的元素的工作:当我没有无限滚动这个脚本工作正常。我试图在infinit滚动后在CClientScript::POS_LOAD之后添加相同的脚本,但在这种情况下,对于脚本执行2次的一些元素,我认为这不是在不同地方重复代码的正确方法。

任何人都可以帮我找到我应该把我的脚本也执行新加载的元素?

以防万一here是有问题的示例页面。

回答

0

听起来就像你遇到了添加新项目的问题,我猜你的图像为.box元素,而jQuery不会将处理程序附加到这些元素上。这种情况的另一个症状是,jQuery交互对第一次加载页面时存在的元素起作用,但不会影响您滚动到的任何新元素。

而不是.click(),您需要使用.on()。特别感兴趣的应该是委派的活动部分。

在任何情况下,你可能会需要像格式:

$("<parentSelector>").on("click", ".box", function(event) { //do some fancy stuff here }) 

parentSelector必须包含.box,是页面的永久部分元素,即加载页面加载和不会消失。