【问题标题】:jQuery with fancybox using trigger() cause stack overflow带有fancybox的jQuery使用trigger()导致堆栈溢出
【发布时间】:2012-09-12 08:12:41
【问题描述】:

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

问题是,如果照片数量较多(例如 8 个画廊,每个 gal 有 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()。

【问题讨论】:

  • jsfiddle.net/r9SEs 是我做的一个小提琴,请编辑它更正确,我添加了一些虚拟警报来帮助,我还发现一些 id 标签引号没有关闭。
  • 感谢您的回复,但我只能看到第一个警报,即点击后立即触发的警报,而不是第二个警报,在 openGal 函数中
  • 所以我编辑了小提琴,触发器调用 fancythumbs click 函数导致无限循环,我猜这就是你的代码中发生的事情。我将为此添加答案并尝试找到解决方案。您能否发布更多代码/相关性来说明您为什么这样做?
  • 只是为了记录:容器div不应该有类fancy-thumb,只是它里面的锚,否则fancybox将尝试使用div的内容作为启动以及单击的锚点的目标(解决方案可能更简单)

标签: jquery triggers fancybox stack-overflow


【解决方案1】:
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 标签,这将允许上述操作员选择它。如果您不想这样做,则所有未包含在标签中的文本都将无法点击。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-05-21
  • 2014-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-04
  • 1970-01-01
  • 2010-09-11
相关资源
最近更新 更多