你如何阻止我这样的链接:
<a href="#" onClick="submitComment()">
Run Code Online (Sandbox Code Playgroud)
从点击后跳到页面顶部?
Sam*_*son 28
很多时候你会看到人们使用这个onclick属性,并且只是return false在它的最后.虽然这确实可行,但它有点难看,可能会使您的代码库难以管理.
<a href="#" onClick="submitComment(); return false;">
Run Code Online (Sandbox Code Playgroud)
如果你将标记与脚本分开,那对你和你的项目来说会好得多.
<a id="submit" href="enableScripts.html">Post Comment</a>
Run Code Online (Sandbox Code Playgroud)
使用上面的HTML,我们可以找到这个元素,并在用户点击元素时连接一个处理程序.我们可以从外部.js文件中完成所有这些操作,以便我们的HTML保持良好和干净,不受任何脚本编写:
if (document.addEventListener) {
document.addEventListener("DOMContentLoaded", setup, false);
} else if (document.attachEvent) {
document.attachEvent("onreadystatechange", setup);
} else {
document.onload = setup;
}
function setup () {
var submit, submitComment;
submit = document.getElementById("submit");
submitComment = function (e) {
e = e || window.event;
e.preventDefault();
alert("You clicked the link!");
};
if (submit.addEventListener) {
submit.addEventListener("click", submitComment, false);
} else if (submit.attachEvent) {
submit.attachEvent("onclick", submitComment);
} else {
submit["onclick"] = submitComment;
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码中有很多内容,但让我们在30,000英尺的范围内运行它.我们首先弄清楚当浏览器加载页面时如何最好地设置我们的代码.理想情况下,我们想在DOM准备就绪时这样做.
在几次条件检查之后,我们设法指示浏览器在准备好DOM之后运行我们的函数(这样我们的锚元素就可以让我们与它的行为进行交互).
我们的setup函数获取对这个锚点的引用,创建一个我们在单击锚点时运行的函数,然后找到一种方法将该函数调用附加到锚点的click事件 - 失去理智吗?这是JavaScript开发人员一段时间以来不得不处理的疯狂.
也许你已经听说过jQuery,并想知道为什么它如此受欢迎.让我们解决同样的问题,但这次使用jQuery而不是原始的vanilla JavaScript.假设以下标记:
<a id="submit" href="enableScripts.html">Post Comment</a>
Run Code Online (Sandbox Code Playgroud)
我们需要的唯一JavaScript(感谢jQuery)是这样的:
$(function(){
$("#submit").on("click", function(event){
event.preventDefault();
submitComment();
});
});
Run Code Online (Sandbox Code Playgroud)
就是这样 - 这就是全部.jQuery的处理所有的测试来确定的,因为你的浏览器,最好的办法就是做这个或那个.它需要所有复杂的东西并将其移开,以便您可以自由发挥创意.
添加返回false.我相信没有它,页面将重新加载.
<a href="#" onClick="submitComment(); return false;">
Run Code Online (Sandbox Code Playgroud)