2011-11-08 69 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()兩次也不會停止默認事件。 –