2015-08-16 39 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