2011-11-08 63 views
0

我试图修复我的灯箱JavaScript中的一个小错误,同时保持尽可能不显眼的编辑。返回false在一个HTML锚不返回false

示例页面: http://www.mattressonline.co.uk/Product/Silentnight-Miracoil-3-Gold-Label-Limited-Edition-Mattress-P43

的问题是与主要的产品形象。如果您点击两个缩略图中的任何一个,图像将按照预期加载到lightbox内部。点击大图像会触发点击图库图像的事件,并且您可以看到灯箱开始弹出,但是标记的默认事件会被触发,图像将加载到单独的窗口中。这不应该发生,因为链接使用返回false;

<a id="gallery-link" class="main" href="#" onclick="click($('gallery-image-0')); return false;" title="Gold Label Mattress"> 
    <img id="gallery-image" src="/content/products/280x175/silentnight-ariel-miracoil-gold-label-limited-edition.jpg" alt="Gold Label Mattress"> 
</a> 

除此之外,它只是一个标准的原型/ scriptaculous/lightbox2设置。

任何想法为什么返回false不会返回false?这令人难以置信的令人沮丧。

编辑:IE6和8 DO按照所述返回false。目前的FF,Chrome和IE9不支持。

回答

1

您正在尝试之后另一事件已经发射了它有自己的一套动作返回false。因此,您打算拨打return false,但在此之前,gallery-image-0会响应您的click()呼叫,该呼叫可能已导致浏览器打开另一页面。

这有道理吗?因此,您需要在目标元素上观察click,并确保它以return falseevent.stop()结尾。

1

Unobtrusive脚本通常意味着不使用内联属性。目前最好的做法是添加监听后的元素被添加到DOM:

$('gallery-link').observe('click', function(event) { 
    click($('gallery-image-0')); 
    event.stop(); 
}); 
+0

不幸的是,这样做在新窗口中产生了与图像加载相同的结果。默认事件仍然没有被阻止。也就是说,我改变了你的代码,为firebug添加了一个控制台日志,并发现点击图像上的ONCE会触发事件监听器两次,这可能是它重写false的原因?不幸的是,event.stop()两次也不会停止默认事件。 –