代码之家  ›  专栏  ›  技术社区  ›  Meph

使用trigger()的带有fancybox的jQuery导致堆栈溢出

  •  0
  • Meph  · 技术社区  · 13 年前

    我试图通过点击与fancybox图库无关的元素来打开fancybox图片库(带缩略图),所以我想使用triger方法。

    问题是,随着照片数量的增加(例如,8个画廊,每个女孩10张照片),如果会导致堆栈溢出。我在这里找到了一些答案,比如使用live()、bind(),stopPropagation(),stopImmediatePropagation)等,但似乎没有什么对我有用。

    HTML是这样的:

    <div id="thumb_1" class="fancy-thumb">
      <a class="fancybox-thumb" id="gal-1 rel="gal-1"><img src="./foo/bar.baz"/></a>
      <a class="fancybox-thumb" rel="gal-1"><img src="./foo/bar.baz"/></a>
      <a class="fancybox-thumb" rel="gal-1"><img src="./foo/bar.baz"/></a>
      .........
      <a class="fancybox-thumb" rel="gal-1"><img src="./foo/bar.baz"/></a>
      <a class="fancybox-thumb" rel="gal-1"><img src="./foo/bar.baz"/></a>
      <another html elements absolute positioned such as labels etc>
    </div>
    .........
    <div id="thumb_10" class="fancy-thumb">
      <a class="fancybox-thumb" id="gal-10 rel="gal-10"><img src="./foo/bar.baz"/></a>
      <a class="fancybox-thumb" rel="gal-10"><img src="./foo/bar.baz"/></a>
      <a class="fancybox-thumb" rel="gal-10"><img src="./foo/bar.baz"/></a>
      .........
      <a class="fancybox-thumb" rel="gal-10"><img src="./foo/bar.baz"/></a>
      <a class="fancybox-thumb" rel="gal-10"><img src="./foo/bar.baz"/></a>
      <another html elements absolute positioned such as labels etc>
    </div>
    

    JS看起来是这样的:

    // fancybox is initialized in after document ready
    $(".fancybox-thumb").fancybox();
    
    // this function should trigger fancybox
    this.openGal(e){
       var gal_id = $(e.currentTarget).attr("id");
       $("#" + gal_id).trigger("click");
       return false;
       // note that here I've tried almost everything found at stackoverflow
       // but nothing seems to work
    }
    
    // listeren looks like this
    $(".fancy-thumb").click(function(e) {scope.openGal(e);});
    

    请不要发布这样的答案,即应该以标准的方式进行,并且使用trigger()不是一个好主意。我需要使用trigger()。

    1 回复  |  直到 13 年前
        1
  •  1
  •   jett    13 年前
    function openGal(e){
       var gal_id = $(e.currentTarget).attr("id");
       $("#" + gal_id).trigger("click");  //this was causing the following function to be called, resulting in an infinite loop
       return false;
    }
    
    // by delegating down a level, we are at the elements we actually want to attack
    // the '>' operator selects child elements
    $(".fancy-thumb >").click(function(e) {
        openGal(e);
    });​
    

    http://jsfiddle.net/LsmVb/ 显示如何通过更改正确调用警报 $(".fancy-thumb a") $(".fancy-thumb") 你可以看到无限循环是从哪里产生的。

    你还想在你的花式拇指的内容中包装一个封闭的div标记,这将允许上面的操作员选择它。如果你不想这样做,所有没有包含在标记中的文本都将无法点击。