2015-08-16 40 views
2

許多其他線程和外部論壇建議,我已經嘗試在每個可以想象的地方放置e.preventDefault()(同時將e作爲參數傳遞,而不是在代碼示例中),但它不會'防止錨點重新加載頁面。當我通過調試器時,它會爲每個div指定scrollNav的click事件,但是當我點擊div鏈接時,它只是重新加載頁面,調試器不會停止在highlightSelection函數的任何行上。我嘗試的另一種方法是在this.click中使用匿名函數,並將e.preventDefault()作爲第一行,但它什麼都不做。jQuery點擊定位標記重新加載頁面

我也不明白你爲什麼要把e.preventDefault()這麼多其他人所建議的地方。這不是基本上說回報是假的嗎?這可能會阻止重新加載頁面的鏈接,但不會阻止該方法中的代碼執行嗎?

jQuery(document).ready(function() { 

jQuery('.scrollNav').each(initSideNavForSelection); 

}); // end ready 

function initSideNavForSelection() { 
    this.click(highlightSelection); 
} 

function highlightSelection() { 
    var selectedDataID = this.attr("data-id"); 

jQuery('.scrollNav').each(function() { 
    if (this.attr("data-id") === selectedDataID) { 
     this.addClass("selected"); 
    } else { 
     this.removeClass("selected"); 
    } 
}) 

}

+0

如果可能,請嘗試使用問題中的堆棧片段或jsfiddle重現您的問題。 –

+0

剛剛嘗試過JSFiddle。同樣的事情也發生在那裏。預覽加載回頂部。 – ShrimpCrackers

+0

請分享您的小提琴鏈接。 –

回答

1

有幾件事情我必須做的就是你的代碼運行。你可以在這個小提琴here上鍊接。

這裏的名單:

  1. 添加的JQuery如用於您的小提琴框架,下框架&擴展在左上角部分。
  2. 刪除破損的onclick="Event.stop(event)"內聯屬性,因爲Event未定義。
  3. 在您的initSideNavForSelection()highlightSelection()函數中替換使用this$(this)this代表DOM對象,$(this)是圍繞this的JQuery包裝。後者將回應JQuery方法,如.click(),但不是前者。

到目前爲止,您的小提琴沒有頁面重新加載,有或沒有e.preventDefault()

最後,除了event.preventDefault()之外,return false還調用event.stopProgagation()來防止事件冒泡DOM,然後立即終止回調執行。對event.preventDefault()的調用不會立即終止函數調用。

+0

謝謝您花時間回答我的問題。對於js和jQuery而言,我遇到了很多麻煩。 – ShrimpCrackers

2

添加onclick="return false;"到錨。 或更改initSideNavForSelection功能

this.click(function(e) { 
    e.preventDefaults(); 
    highlightSelection(); 
}); 

無論是工作

+0

我已經嘗試了這兩個,既沒有onclick虛假或匿名功能設置點擊工作。和以前一樣,頁面只是在點擊時重新加載。 – ShrimpCrackers