正如许多其他线程和外部论坛所显示的,我尝试将e.preventDefault() (同时将e作为参数传递,而不是在代码示例中传递)放置在每个可以想象的位置,但这并不能阻止锚点重新加载页面。当我跨过调试器时,它将使用scrollNav为每个div分配单击事件,但当我单击div-链接时,它只是重新加载页面,调试器不会停止在highlightSelection函数中的任何行。我尝试过的另一种方法是在this.click中使用一个匿名函数,并将e.preventDefault()作为第一行,但是它什么也不做。
我也不太明白为什么要像其他人所建议的那样放置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");
}
})}
发布于 2015-08-16 23:06:11
我得做几件事才能让你的密码运行。你可以在这个小提琴这里上做一个链接。
下面是清单:
onclick="Event.stop(event)"内联属性,因为Event是未定义的。this和highlightSelection()函数中用$(this)替换initSideNavForSelection()的用法。this表示DOM对象,$(this)是围绕this的JQuery包装器。后者将响应JQuery方法,如.click(),但不响应前者。到目前为止,没有页面重新加载在您的小提琴,无论有没有e.preventDefault()。
最后,除了event.preventDefault()之外,return false还调用event.stopProgagation()以防止事件冒泡DOM,然后立即终止回调执行。对event.preventDefault()的调用不会立即终止函数调用。
发布于 2015-08-16 05:16:46
将onclick="return false;"添加到锚。或将initSideNavForSelection函数更改为
this.click(function(e) {
e.preventDefaults();
highlightSelection();
});这两种方法都有效
https://stackoverflow.com/questions/32032064
复制相似问题