2cB*_*sfp 3980 html javascript optimization performance href
以下是构建链接的两种方法,其唯一目的是运行JavaScript代码.哪个更好,在功能,页面加载速度,验证目的等方面?
function myJsFunc() {
alert("myJsFunc");
}Run Code Online (Sandbox Code Playgroud)
<a href="#" onclick="myJsFunc();">Run JavaScript Code</a>Run Code Online (Sandbox Code Playgroud)
要么
function myJsFunc() {
alert("myJsFunc");
}Run Code Online (Sandbox Code Playgroud)
<a href="javascript:void(0)" onclick="myJsFunc();">Run JavaScript Code</a>Run Code Online (Sandbox Code Playgroud)
Ant*_*nes 2133
我用javascript:void(0).
三个原因.鼓励在#开发人员团队中使用不可避免地导致一些人使用这样调用的函数的返回值:
function doSomething() {
//Some code
return false;
}
Run Code Online (Sandbox Code Playgroud)
但后来他们忘了return doSomething()在onclick上使用而只是使用doSomething().
避免的第二个原因#是return false;如果被调用函数抛出错误,则final 将不会执行.因此,开发人员还必须记住在被调用函数中适当地处理任何错误.
第三个原因是存在onclick动态分配事件属性的情况.我更喜欢能够调用函数或动态分配它,而不必专门为一种附件或其他方法编写函数.因此onclick,HTML标记中的我(或任何内容)如下所示:
onclick="someFunc.call(this)"
Run Code Online (Sandbox Code Playgroud)
要么
onclick="someFunc.apply(this, arguments)"
Run Code Online (Sandbox Code Playgroud)
使用javascript:void(0)避免了上述所有问题,我没有找到任何缺点的例子.
因此,如果您是一名独立开发人员,那么您可以明确地做出自己的选择,但如果您以团队形式工作,则必须说明:
使用href="#",确保onclick总是包含return false;在最后,任何被调用的函数都不会抛出错误,如果你动态地将一个函数附加到onclick属性,请确保它不返回错误false.
要么
使用 href="javascript:void(0)"
第二个显然更容易沟通.
Aar*_*ner 1299
都不是.
如果您有一个有意义的实际URL,请将其用作HREF.如果有人在您的链接上单击鼠标中键以打开新标签页或禁用了JavaScript,则onclick将不会触发.
如果那是不可能的,那么您至少应该使用JavaScript和相应的单击事件处理程序将锚标记注入到文档中.
我意识到这并不总是可行,但在我看来,应该努力开发任何公共网站.
查看Unmptrusive JavaScript和Progressive增强(两者都是Wikipedia).
bal*_*ton 768
做<a href="#" onclick="myJsFunc();">Link</a>或者<a href="javascript:void(0)" onclick="myJsFunc();">Link</a>或者包含onclick属性的任何其他东西- 五年前还可以,但现在它可能是一个不好的做法.原因如下:
它促进了突兀的JavaScript的实践 - 这已经证明难以维护并且难以扩展.更多关于Unobtrusive JavaScript的内容.
你花时间编写令人难以置信的过于冗长的代码 - 这对你的代码库有很小的(如果有的话)好处.
现在有更好,更容易,更可维护和可扩展的方法来实现所需的结果.
根本就没有href属性!任何好的CSS重置都会处理缺少的默认光标样式,因此这不是问题.然后使用优雅且不显眼的最佳实践附加您的JavaScript功能 - 当您的JavaScript逻辑保留在JavaScript而不是标记中时,这些实践更易于维护 - 这在您开始开发需要将逻辑拆分为大型JavaScript应用程序时非常重要黑盒子组件和模板.在大型JavaScript应用程序架构中有更多相关内容
// Cancel click event
$('.cancel-action').click(function(){
alert('Cancel action occurs!');
});
// Hover shim for Internet Explorer 6 and Internet Explorer 7.
$(document.body).on('hover','a',function(){
$(this).toggleClass('hover');
});Run Code Online (Sandbox Code Playgroud)
a { cursor: pointer; color: blue; }
a:hover,a.hover { text-decoration: underline; }Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a class="cancel-action">Cancel this action</a>Run Code Online (Sandbox Code Playgroud)
对于可伸缩的黑盒子 Backbone.js组件示例 - 请参阅此处的jsfiddle示例.请注意我们如何利用不引人注目的JavaScript实践,并且在少量代码中有一个组件可以在页面上重复多次,而不会在不同的组件实例之间产生副作用或冲突.惊人!
省略元素href上的属性a将导致使用tab键导航无法访问该元素.如果您希望通过tab键可以访问这些元素,则可以设置tabindex属性,或使用button元素.您可以轻松地将按钮元素设置为看起来像Tracker1的答案中提到的普通链接.
省略元素href上的属性a将导致Internet Explorer 6和Internet Explorer 7不采用a:hover样式,这就是为什么我们添加了一个简单的JavaScript填充程序来实现此目的a.hover.这是完全没问题的,好像你没有href属性并且没有优雅的降级那么你的链接无论如何也无法正常工作 - 你会有更大的问题需要担心.
如果您希望您的操作仍然可以在禁用JavaScript的情况下使用,那么使用a具有href属性的元素将转到某个URL,该URL将手动执行操作,而不是通过Ajax请求或任何应该去的方式.如果您这样做,那么您希望确保event.preventDefault()在点击通话中执行操作,以确保在单击按钮时它不会跟随链接.此选项称为优雅降级.
Ada*_*tle 318
'#'将用户带回到页面顶部,所以我通常会去void(0).
javascript:; 也表现得像 javascript:void(0);
Tra*_*er1 266
老实说我也不建议.我会使用程式化<button></button>的行为.
button.link {
display: inline-block;
position: relative;
background-color: transparent;
cursor: pointer;
border: 0;
padding: 0;
color: #00f;
text-decoration: underline;
font: inherit;
}Run Code Online (Sandbox Code Playgroud)
<p>A button that looks like a <button type="button" class="link">link</button>.</p>Run Code Online (Sandbox Code Playgroud)
这样您就可以分配您的onclick.我还建议通过脚本绑定,而不是使用onclick元素标记上的属性.唯一的问题是旧的IE中的psuedo 3d文本效果无法禁用.
如果你必须使用A元素,请使用javascript:void(0);已经提到的原因.
注意:您可以0使用字符串替换,例如javascript:void('Delete record 123')可以作为额外指示符来显示点击实际执行的操作.
Zac*_*ach 139
第一个,理想情况下,如果用户禁用了JavaScript,可以使用真实链接.只需确保返回false以防止在JavaScript执行时触发click事件.
<a href="#" onclick="myJsFunc(); return false;">Link</a>
Run Code Online (Sandbox Code Playgroud)
如果您使用Angular2,这种方式有效:
<a [routerLink]="" (click)="passTheSalt()">Click me</a>.
fij*_*ter 104
如果你问我我也不会;
如果您的"链接"的唯一目的是运行某些JavaScript代码,则它不符合链接条件; 而是一段带有JavaScript功能的文本.我建议使用附加到它的<span>标签onclick handler和一些基本的CSS来模仿链接.链接用于导航,如果您的JavaScript代码不用于导航,则它不应该是<a>标记.
例:
function callFunction() { console.log("function called"); }Run Code Online (Sandbox Code Playgroud)
.jsAction {
cursor: pointer;
color: #00f;
text-decoration: underline;
}Run Code Online (Sandbox Code Playgroud)
<p>I want to call a JavaScript function <span class="jsAction" onclick="callFunction();">here</span>.</p>Run Code Online (Sandbox Code Playgroud)
Ste*_*ulo 96
理想情况下你会这样做:
<a href="javascriptlessDestination.html" onclick="myJSFunc(); return false;">Link text</a>
Run Code Online (Sandbox Code Playgroud)
或者,更好的是,你在HTML中有默认的动作链接,你可以在DOM渲染后通过JavaScript不加干扰地将onclick事件添加到元素中,从而确保如果不存在/使用JavaScript你就不会让无用的事件处理程序摆脱你的代码,并可能使你的实际内容混淆(或至少分散注意力).
小智 76
使用只是#做一些有趣的动作,所以我建议#self你使用,如果你想节省打字的努力JavaScript bla, bla,.
se_*_*vel 67
我使用以下内容
<a href="javascript:;" onclick="myJsFunc();">Link</a>
Run Code Online (Sandbox Code Playgroud)
代替
<a href="javascript:void(0);" onclick="myJsFunc();">Link</a>
Run Code Online (Sandbox Code Playgroud)
Fcz*_*bkk 53
我同意其他地方的建议,说明你应该在href属性中使用常规URL ,然后在onclick中调用一些JavaScript函数.缺点是,他们会return false在通话后自动添加.
这种方法的问题是,如果函数不起作用或者如果有任何问题,链接将变得不可点击.Onclick事件将始终返回false,因此不会调用普通URL.
这是非常简单的解决方案.true如果函数正常工作,让函数返回.然后使用返回的值来确定是否应该取消单击:
JavaScript的
function doSomething() {
alert( 'you clicked on the link' );
return true;
}
Run Code Online (Sandbox Code Playgroud)
HTML
<a href="path/to/some/url" onclick="return !doSomething();">link text</a>
Run Code Online (Sandbox Code Playgroud)
注意,我否定了doSomething()函数的结果.如果它有效,它将返回true,因此它将被否定(false)并且path/to/some/URL不会被调用.如果函数将返回false(例如,浏览器不支持该功能中使用的东西,或其他任何出错),它被否定,true而path/to/some/URL被调用.
Jus*_*son 50
#比以前更好javascript:anything,但以下情况更好:
HTML:
<a href="/gracefully/degrading/url/with/same/functionality.ext" class="some-selector">For great justice</a>
Run Code Online (Sandbox Code Playgroud)
JavaScript的:
$(function() {
$(".some-selector").click(myJsFunc);
});
Run Code Online (Sandbox Code Playgroud)
您应该始终努力实现优雅降级(如果用户没有启用JavaScript ......以及何时使用规范和预算).此外,在HTML中直接使用JavaScript属性和协议被认为是不好的形式.
Sim*_*est 39
除非您使用JavaScript写出链接(因此您知道它已在浏览器中启用),否则理想情况下应为正在使用JavaScript进行浏览的人提供正确的链接,然后阻止onclick中链接的默认操作事件处理程序 这样,启用JavaScript的人将运行该功能,禁用JavaScript的人将跳转到适当的页面(或同一页面内的位置),而不是仅仅点击链接并且没有任何事情发生.
Fre*_*ing 36
绝对hash(#)更好,因为在JavaScript中它是一个伪方案:
当然,使用onclick处理程序来防止默认操作的"#"更好.此外,唯一目的是运行JavaScript的链接并不是真正的"链接",除非您在发生错误时将用户发送到页面上的某个合理的锚点(只有#将发送到顶部).您可以简单地模拟与样式表链接的外观和感觉,完全忘记href.
另外,关于cowgod的建议,尤其是:...href="javascript_required.html" onclick="...这是一种很好的方法,但它不区分"禁用JavaScript"和"onclick失败"方案.
小智 30
我经常去
<a href="javascript:;" onclick="yourFunction()">Link description</a>
Run Code Online (Sandbox Code Playgroud)
它比javascript:void(0)短并且做同样的事情.
Eri*_*Yin 27
我会用:
<a href="#" onclick="myJsFunc();return false;">Link</a>
Run Code Online (Sandbox Code Playgroud)
原因:
href简单的搜索引擎需要它.如果您使用其他任何内容(例如字符串),则可能会导致404 not found错误.return false;,页面不会跳到顶部或中断back按钮.Ash*_*mar 24
因此,当您使用<a />标记执行某些JavaScript操作时,如果放置href="#",则可以在事件结束时添加return false (在内联事件绑定的情况下),如:
<a href="#" onclick="myJsFunc(); return false;">Run JavaScript Code</a>
Run Code Online (Sandbox Code Playgroud)
或者您可以使用以下JavaScript 更改href属性:
<a href="javascript://" onclick="myJsFunc();">Run JavaScript Code</a>
Run Code Online (Sandbox Code Playgroud)
要么
<a href="javascript:void(0)" onclick="myJsFunc();">Run JavaScript Code</a>
Run Code Online (Sandbox Code Playgroud)
但从语义上讲,实现这一目标的所有方法都是错误的(尽管如此).如果没有创建任何元素来导航页面并且有一些与之关联的JavaScript事物,则它不应该是<a>标记.
您可以根据需要简单地使用a <button />来执行操作或任何其他元素,如b,span或任何适合的元素,因为您可以在所有元素上添加事件.
所以,有一个好处使用<a href="#">.当你这样做时,你会在该元素上默认获得光标指针a href="#".为此,我认为你可以使用CSS来cursor:pointer;解决这个问题.
最后,如果您从JavaScript代码本身绑定事件,那么event.preventDefault()如果您使用<a>标记,则可以实现此目的,但如果您没有使用<a>标记,那么您将获得优势,我需要这样做.
所以,如果你看到,最好不要在这类东西上使用标签.
Gar*_*ett 23
不要仅为了运行JavaScript而使用链接.
使用href ="#"将页面滚动到顶部; void(0)的使用会在浏览器中产生导航问题.
相反,使用链接以外的元素:
<span onclick="myJsFunc()" class="funcActuator">myJsFunc</span>
Run Code Online (Sandbox Code Playgroud)
并使用CSS设置样式:
.funcActuator {
cursor: default;
}
.funcActuator:hover {
color: #900;
}
Run Code Online (Sandbox Code Playgroud)
nav*_*een 22
使用jQuery会更好
$(document).ready(function() {
$("a").css("cursor", "pointer");
});
Run Code Online (Sandbox Code Playgroud)
并省略href="#"和href="javascript:void(0)".
锚标记标记就像
<a onclick="hello()">Hello</a>
Run Code Online (Sandbox Code Playgroud)
很简单!
whi*_*win 20
如果您碰巧使用AngularJS,则可以使用以下内容:
<a href="">Do some fancy JavaScript</a>
Run Code Online (Sandbox Code Playgroud)
哪个不会做任何事情.
此外
false使用JavaScript 显式返回And*_*ore 19
通常,您应始终使用后备链接以确保禁用JavaScript的客户端仍具有某些功能.这个概念被称为不引人注目的JavaScript.
示例...假设您有以下搜索链接:
<a href="search.php" id="searchLink">Search</a>
Run Code Online (Sandbox Code Playgroud)
您始终可以执行以下操作:
var link = document.getElementById('searchLink');
link.onclick = function() {
try {
// Do Stuff Here
} finally {
return false;
}
};
Run Code Online (Sandbox Code Playgroud)
这样,禁用JavaScript search.php的用户就可以使用JavaScript查看您的增强功能.
ach*_*art 18
如果没有,href可能没有理由使用锚标记.
您可以在几乎每个元素上附加事件(单击,悬停等),那么为什么不使用a span或a div?
对于禁用JavaScript的用户:如果没有后备(例如,替代方案href),他们至少应该无法查看该元素并与之交互,无论它是什么<a>或<span>标记.
小智 16
根据你想要完成的任务,你可以忘记onclick并只使用href:
<a href="javascript:myJsFunc()">Link Text</a>
Run Code Online (Sandbox Code Playgroud)
它绕过了返回false的需要.我不喜欢这个#选项,因为如上所述,它会将用户带到页面顶部.如果你有其他地方发送用户,如果他们没有启用JavaScript(这在我工作的地方很少,但是一个非常好的主意),那么史蒂夫提出的方法效果很好.
<a href="javascriptlessDestination.html" onclick="myJSFunc(); return false;">Link text</a>
Run Code Online (Sandbox Code Playgroud)
最后,javascript:void(0)如果您不希望任何人去任何地方并且您不想调用JavaScript函数,则可以使用.如果您有想要发生鼠标悬停事件的图像,它会很有效,但用户无需点击任何内容.
Cle*_*man 16
我相信你提出了一个错误的二分法.这些不是唯一的两个选择.
我同意D4V360先生的建议,即使你使用锚标签,你也不会真正拥有锚.您所拥有的只是文档的特殊部分,其行为应略有不同.一个<span>标签是更为合适.
小智 16
当我有几个虚假链接时,我更喜欢给他们一类'无链接'.
然后在jQuery中,我添加以下代码:
$(function(){
$('.no-link').click(function(e){
e.preventDefault();
});
});
Run Code Online (Sandbox Code Playgroud)
对于HTML,链接很简单
<a href="/" class="no-link">Faux-Link</a>
Run Code Online (Sandbox Code Playgroud)
我不喜欢使用Hash-Tags,除非它们用于锚点,而且当我有两个以上的虚假链接时我只做上述操作,否则我会使用javascript:void(0).
<a href="javascript:void(0)" class="no-link">Faux-Link</a>
Run Code Online (Sandbox Code Playgroud)
通常情况下,我喜欢完全避免使用链接,只是在一个范围内包装一些内容,并使用它作为一种方式来激活一些JavaScript代码,如弹出窗口或内容显示.
小智 16
我使用开发者工具在谷歌浏览器中尝试了两种方法,id="#"花了0.32秒.虽然该javascript:void(0)方法只需0.18秒.所以在谷歌浏览器中,javascript:void(0)工作得更好更快.
mde*_*dev 15
我个人将它们组合使用.例如:
HTML
<a href="#">Link</a>
Run Code Online (Sandbox Code Playgroud)
一点点jQuery
$('a[href="#"]').attr('href','javascript:void(0);');
Run Code Online (Sandbox Code Playgroud)
要么
$('a[href="#"]').click(function(e) {
e.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)
但我正在使用它只是为了防止页面在用户点击空锚时跳到顶部.我很少on直接在HTML中使用onClick和其他事件.
我的建议是使用<span>带class属性的元素而不是锚.例如:
<span class="link">Link</span>
Run Code Online (Sandbox Code Playgroud)
然后.link使用包含在正文中的脚本以及</body>标记之前或外部JavaScript文档中的函数来分配函数.
<script>
(function($) {
$('.link').click(function() {
// do something
});
})(jQuery);
</script>
Run Code Online (Sandbox Code Playgroud)
*注意:对于动态创建的元素,请使用:
$('.link').on('click', function() {
// do something
});
Run Code Online (Sandbox Code Playgroud)
对于使用动态创建的元素创建的动态创建的元素,请使用:
$(document).on('click','.link', function() {
// do something
});
Run Code Online (Sandbox Code Playgroud)
然后你可以将span元素设置为看起来像一个带有一点CSS的锚点:
.link {
color: #0000ee;
text-decoration: underline;
cursor: pointer;
}
.link:active {
color: red;
}
Run Code Online (Sandbox Code Playgroud)
这是上面提到的jsFiddle示例.
小智 13
我基本上使用渐进增强来解释这篇实用文章.简短的回答是你从不使用javascript:void(0);或#除非你的用户界面已经推断出JavaScript已经启用,在这种情况下你应该使用javascript:void(0);.另外,不要使用span作为链接,因为从语义上来说这是错误的.
在您的应用程序中使用SEO友好的URL路由,例如/ Home/Action/Parameters也是一种很好的做法.如果您有一个指向不使用JavaScript的页面的链接,那么您可以在以后增强体验.使用指向工作页面的真实链接,然后添加onlick事件以增强演示.
这是一个例子.Home/ChangePicture是一个页面上的表单的工作链接,其中包含用户界面和标准HTML提交按钮,但它看起来更好,注入了带有jQueryUI按钮的模态对话框.无论哪种方式都可以,取决于浏览器,它满足移动优先开发.
<p><a href="Home/ChangePicture" onclick="return ChangePicture_onClick();" title="Change Picture">Change Picture</a></p>
<script type="text/javascript">
function ChangePicture_onClick() {
$.get('Home/ChangePicture',
function (htmlResult) {
$("#ModalViewDiv").remove(); //Prevent duplicate dialogs
$("#modalContainer").append(htmlResult);
$("#ModalViewDiv").dialog({
width: 400,
modal: true,
buttons: {
"Upload": function () {
if(!ValidateUpload()) return false;
$("#ModalViewDiv").find("form").submit();
},
Cancel: function () { $(this).dialog("close"); }
},
close: function () { }
});
}
);
return false;
}
</script>
Run Code Online (Sandbox Code Playgroud)
mma*_*lay 12
很高兴让禁用JavaScript的用户可以访问您的站点,在这种情况下,href指向一个执行与正在执行的JavaScript相同的操作的页面.否则我使用带有" "的" # " return false;来阻止默认操作(滚动到页面顶部),正如其他人提到的那样.
谷歌搜索" javascript:void(0)"提供了有关此主题的大量信息.其中一些像这样提到不使用void(0)的原因.
小智 11
您还可以在锚中写一个提示,如下所示:
<a href="javascript:void('open popup image')" onclick="return f()">...</a>
Run Code Online (Sandbox Code Playgroud)
因此用户将知道此链接的作用.
And*_* M. 11
我想说最好的方法是将一个href锚点转换为你永远不会使用的ID,比如#Do1Not2Use3This4Id5或类似的ID,你100%肯定没有人会使用它并且不会冒犯别人.
Javascript:void(0)是一个坏主意,违反了启用CSP的HTTPS页面上的内容安全策略https://developer.mozilla.org/en/docs/Security/CSP(感谢@ jakub.g)#会让用户在按下时跳回到顶部基本上没有人在本文中提到5我认为很重要,因为如果你的网站突然开始选择链接周围的东西,你的网站就会变得不专业.
我看到很多想要继续使用#价值观的人的答案href,因此,这是一个有希望满足两个阵营的答案:
A)我很高兴有javascript:void(0)我的href价值:
<a href="javascript:void(0)" onclick="someFunc.call(this)">Link Text</a>
Run Code Online (Sandbox Code Playgroud)
B)我正在使用jQuery,并希望#作为我的href价值:
<a href="#" onclick="someFunc.call(this)">Link Text</a>
<script type="text/javascript">
/* Stop page jumping when javascript links are clicked.
Only select links where the href value is a #. */
$('a[href="#"]').live("click", function(e) {
return false; // prevent default click action from happening!
e.preventDefault(); // same thing as above
});
</script>
Run Code Online (Sandbox Code Playgroud)
请注意,如果您知道不会动态创建链接,请改用以下click函数:
$('a[href="#"]').click(function(e) {
小智 9
我使用href ="#"作为我想要虚拟行为的链接.然后我使用这段代码:
$(document).ready(function() {
$("a[href='#']").click(function(event) {
event.preventDefault();
});
});
Run Code Online (Sandbox Code Playgroud)
这意味着如果href等于散列(*="#"),它会阻止默认链接行为,因此仍然允许您为其编写功能,并且它不会影响锚点击.
在现代网站上,如果元素仅执行JavaScript功能(不是真实链接),则应避免使用href.
为什么?此元素的存在告诉浏览器这是一个与目标的链接.这样,浏览器将显示"在新选项卡/窗口中打开"功能(当您使用shift +单击时也会触发).这样做会导致打开同一页面而不会触发所需的功能(导致用户受挫).
关于IE:从IE8开始,如果设置了doctype,则元素样式(包括悬停)可以工作.其他版本的IE不再需要担心了.
只有缺点:删除HREF会删除tabindex.为了解决这个问题,您可以使用一个样式为链接的按钮或使用JS添加tabindex属性.
小智 9
最简单也是大家最常用的就是javascript:void(0)你可以用它来代替#来停止标签重定向到 header section。
<a href="javascript:void(0)" onclick="testFunction();">Click To check Function</a>
function testFunction() {
alert("hello world");
}
Run Code Online (Sandbox Code Playgroud)
只是为了提到其他人提到的一点.
绑定事件'onload'a或$('document')要好得多.ready {}; 然后将JavaScript直接放入click事件中.
在JavaScript不可用的情况下,我会使用href到当前URL,也许是锚点到链接的位置.该页面仍可供没有JavaScript的人使用,他们不会注意到任何差异.
正如我要掌握的,这里有一些jQuery可能会有所帮助:
var [functionName] = function() {
// do something
};
jQuery("[link id or other selector]").bind("click", [functionName]);
Run Code Online (Sandbox Code Playgroud)
我从你的话中理解的是,你想创建一个链接来运行JavaScript代码.
然后你应该考虑有人在他们的浏览器中阻止JavaScript.
因此,如果您真的要仅使用该链接来运行JavaScript函数,那么您应该动态添加它,这样如果用户没有在浏览器中启用它们并且您正在使用该链接,那么它甚至都不会被看到触发一个JavaScript函数,在浏览器中禁用JavaScript时使用类似的链接是没有意义的.
因此,当禁用JavaScript时,它们都不好.
如果启用了JavaScript,您只想使用该链接来调用JavaScript函数
<a href="javascript:void(0)" onclick="myJsFunc();">Link</a>
Run Code Online (Sandbox Code Playgroud)
比使用更好的方式
<a href="#" onclick="myJsFunc();">Link</a>
Run Code Online (Sandbox Code Playgroud)
因为href ="#"将导致页面执行不需要的操作.
另外,另一个原因<a href="javascript:void(0)" onclick="myJsFunc();">Link</a>是<a href="#" onclick="myJsFunc();">Link</a>JavaScript 比大多数浏览器的默认脚本语言更好.作为Internet Explorer的示例,使用onclick属性来定义将使用的脚本语言的类型.除非弹出另一种优秀的脚本语言,否则Internet Explorer也将使用JavaScript作为默认语言,但如果使用其他脚本语言javascript:,则可以让Internet Explorer了解正在使用的脚本语言.
考虑到这一点,我更喜欢使用和锻炼
<a href="javascript:void(0)" onclick="myJsFunc();">Link</a>
Run Code Online (Sandbox Code Playgroud)
足以使它成为习惯并且更加用户友好,请在JavaScript代码中添加这种链接:
$(document).ready(function(){
$(".blabla").append('<a href="javascript:void(0)" onclick="myJsFunc();">Link</a>')
});
Run Code Online (Sandbox Code Playgroud)
您可以使用href并删除所有只有哈希的链接:
HTML:
<a href="#" onclick="run_foo()"> foo </a>
Run Code Online (Sandbox Code Playgroud)
JS:
$(document).ready(function(){ // on DOM ready or some other event
$('a[href=#]').attr('href',''); // set all reference handles to blank strings
// for anchors that have only hashes
});
Run Code Online (Sandbox Code Playgroud)
小智 8
为什么不用这个呢?这不会向上滚动页面.
<span role="button" onclick="myJsFunc();">Run JavaScript Code</span>
Run Code Online (Sandbox Code Playgroud)
理想情况下,您应该有一个真正的URL作为非JavaScript用户的后备.
如果这没有意义,请使用#作为href属性.我不喜欢使用该onclick属性,因为它直接在JavaScript中嵌入JavaScript.更好的想法是使用外部JS文件,然后将事件处理程序添加到该链接.然后,您可以阻止默认事件,以便#在用户单击它之后不会更改URL以附加该URL .
如果您使用的是<a>元素,请使用:
<a href="javascript:myJSFunc();" />myLink</a>
Run Code Online (Sandbox Code Playgroud)
我个人稍后会使用JavaScript附加一个事件处理程序(使用attachEvent或者addEventListener或者也可以<把你最喜欢的JavaScript框架放在这里>).
小智 7
完全符合整体情绪,void(0)在需要时使用,并在需要时使用有效的URL.
使用URL重写,您可以创建不仅可以执行禁用JavaScript操作的URL,而且还可以告诉您它将要执行的操作.
<a href="./Readable/Text/URL/Pointing/To/Server-Side/Script" id="theLinkId">WhyClickHere</a>
Run Code Online (Sandbox Code Playgroud)
在服务器端,您只需要解析URL和查询字符串并执行您想要的操作.如果您很聪明,则可以允许服务器端脚本以不同方式响应Ajax和标准请求.允许您使用简洁的集中代码来处理页面上的所有链接.
优点
缺点
我相信那里有更多的缺点.随意讨论它们.
在HTML5 中,使用没有 href 属性的 a 元素是有效的。它被认为是一个“占位符超链接”
如果 a 元素没有 href 属性,则该元素表示一个占位符,用于在其他情况下放置链接的位置(如果链接是相关的),则仅由元素的内容组成。
例子:
<a>previous</a>
Run Code Online (Sandbox Code Playgroud)
如果之后你想做其他事情:
1 - 如果您的链接没有到达任何地方,请不要使用<a>元素。使用 a<span>或其他适当的东西并添加 CSS:hover以根据需要设置样式。
2 -如果您想要原始、精确和快速,请使用javascript:void(0)OR javascript:undefinedOR javascript:;。
如果您使用的链接,以此来只执行一些JavaScript代码(而不是使用像D4V360跨度极大的建议),只是做:
<a href="javascript:(function()%7Balert(%22test%22)%3B%7D)()%3B">test</a>
Run Code Online (Sandbox Code Playgroud)
如果您使用带onclick的链接进行导航,请不要在JavaScript关闭时使用href ="#"作为后备.当用户点击链接时,通常会非常烦人.相反,如果可能,提供onclick处理程序将提供的相同链接.如果您不能这样做,请跳过onclick并在href中使用JavaScript URI.
我非常希望尽可能地将我的JavaScript保留在HTML标记之外.如果我使用<a>点击事件处理程序,那么我建议使用<a class="trigger" href="#">Click me!</a>.
$('.trigger').click(function (e) {
e.preventDefault();
// Do stuff...
});
Run Code Online (Sandbox Code Playgroud)
值得注意的是,许多开发人员都认为使用锚点标记来实现点击事件处理程序并不好.他们更喜欢你使用<span>或<div>添加一些CSS cursor: pointer;.这是一个很多争论的问题.
您不应该onclick="something();"在HTML中使用内联,以免使用无意义的代码来污染它; 必须在Javascript文件(*.js)中设置所有单击绑定.
像这样设置绑定:$('#myAnchor').click(function(){... **return false**;}); 或 $('#myAnchor').bind('click', function(){... **return false**;});
然后你有一个干净的HTML文件很容易加载(和seo友好)没有数千href="javascript:void(0);"和只是href="#"
小智 5
您可以在此处使用 javascript:void(0) 而不是使用 # 来停止锚标记重定向到标头部分。
function helloFunction() {
alert("hello world");
}
<a href="javascript:void(0)" onclick="helloFunction();">Call Hello Function</a>
Run Code Online (Sandbox Code Playgroud)