当前位置:  开发笔记 > 编程语言 > 正文

我应该将哪个"href"值用于JavaScript链接,"#"或"javascript:void(0)"?

如何解决《我应该将哪个"href"值用于JavaScript链接,"#"或"javascript:void(0)"?》经验,为你挑选了48个好方法。

以下是构建链接的两种方法,其唯一目的是运行JavaScript代码.哪个更好,在功能,页面加载速度,验证目的等方面?

function myJsFunc() {
    alert("myJsFunc");
}
Run JavaScript Code

要么

function myJsFunc() {
    alert("myJsFunc");
}
 Run JavaScript Code



1> AnthonyWJone..:

我用javascript:void(0).

三个原因.鼓励在#开发人员团队中使用不可避免地导致一些人使用这样调用的函数的返回值:

function doSomething() {
    //Some code
    return false;
}

但后来他们忘了return doSomething()在onclick上使用而只是使用doSomething().

避免的第二个原因#return false;如果被调用函数抛出错误,则final 将不会执行.因此,开发人员还必须记住在被调用函数中适当地处理任何错误.

第三个原因是存在onclick动态分配事件属性的情况.我更喜欢能够调用函数或动态分配它,而不必专门为一种附件或其他方法编写函数.因此onclick,HTML标记中的我(或任何内容)如下所示:

onclick="someFunc.call(this)"

要么

onclick="someFunc.apply(this, arguments)"

使用javascript:void(0)避免了上述所有问题,我没有找到任何缺点的例子.

因此,如果您是一名独立开发人员,那么您可以明确地做出自己的选择,但如果您以团队形式工作,则必须说明:

使用href="#",确保onclick总是包含return false;在最后,任何被调用的函数都不会抛出错误,如果你动态地将一个函数附加到onclick属性,请确保它不返回错误false.

要么

使用 href="javascript:void(0)"

第二个显然更容易沟通.


我总是打开一个新选项卡中的每个链接,这就是我个人讨厌它时人们使用`href ="javascript:void(0)"`方法的原因
抱歉不同意为什么这个答案有这么多的赞成?任何使用"javascript:"都应该被认为是不好的做法,突兀而且没有优雅的降级.
快进到2013年:`javascript:void(0)`在启用CSP的HTTPS页面上违反[内容安全策略](https://developer.mozilla.org/en/docs/Security/CSP).一种选择是在处理程序中使用`href ='#'`和`event.preventDefault()`,但我不喜欢这么多.也许你可以建立一个使用`href ='#void'的约定,并确保页面上的元素没有`id ="void"`.这样,单击指向不存在的锚点的链接将不会滚动页面.
接下来的两个答案比这个答案好得多且合理.前两个参数也是无效的,因为`event.preventDefault()`完全是为了防止默认行为(比如在这种情况下跳转到页面顶部)并且在没有所有`return false;的情况下做得更好.疯狂.
您可以使用"#"然后将click事件绑定到所有带有"#"的链接作为`href`.这将在jQuery中完成:`$('a [href ="#"]').click(function(e){e.preventDefault?e.preventDefault():e.returnValue = false;});`
这是最好的答案,因为它实际上回答了这个问题.大多数人似乎错过了"一个只有运行JavaScript代码的链接"部分.所有关于新标签中的链接,优雅降级和网络开发的喋喋不休都是关于主题网标准/最佳实践恐慌贩卖.没有href可能是最好的,但这实际上会降低可访问性并可能导致其他意外行为.
历史课:哈希`#`的使用是一个开始的黑客.较旧的浏览器(即IE)不会使`A`标签在没有非空`HREF`属性的情况下可点击,并且许多元素永远不可点击; 哈希是唯一一种使可点击的东西同时阻止导航的方法,因为有些浏览器还没有运行Javascript.没有现代(即使是现在仍在使用的旧IE)也不再存在这些问题; 因此,最好坚持使用标准并避免这些黑客以其他答案中提到的标准适当方式进行操作.
@jaminroe好问题; 在现代浏览器中,这似乎对我有用:`window.onhashchange = function(evt){if(evt.newURL.endsWith("#void")){history.replaceState(null,null,evt.oldURL); 虽然MDN说它不支持`evt.newURL`和`evt.oldURL`(至少是IE8),但还没有用IE测试过.IE10支持`replaceState`.
这是最糟糕的答案.使用链接链接,而不是javascript.`javascript:`伪协议旨在用表达式返回的值替换当前文档.当使用的表达式求值为未定义的值(如某些函数调用那样)时,不替换当前页面的内容.无论如何,一些浏览器将其解释为导航并将进入"导航"状态,其中GIF动画和插件(例如电影)将停止,并且诸如META刷新,分配到"location.href"和图像交换的导航功能失败.

2> Aaron Wagner..:

都不是.

如果您有一个有意义的实际URL,请将其用作HREF.如果有人在您的链接上单击鼠标中键以打开新标签页或禁用了JavaScript,则onclick将不会触发.

如果那是不可能的,那么您至少应该使用JavaScript和相应的单击事件处理程序将锚标记注入到文档中.

我意识到这并不总是可行,但在我看来,应该努力开发任何公共网站.

查看Unmptrusive JavaScriptProgressive增强(两者都是Wikipedia).


您能举例说明如何使用JavaScript和适当的点击事件处理程序将锚标记注入文档中吗?
@crush:我也不会使用div或span; 坦率地说,这似乎就是`的行为.

button.link {
  display: inline-block;
  position: relative;
  background-color: transparent;
  cursor: pointer;
  border: 0;
  padding: 0;
  color: #00f;
  text-decoration: underline;
  font: inherit;
}

A button that looks like a .



6> Zach..:

第一个,理想情况下,如果用户禁用了JavaScript,可以使用真实链接.只需确保返回false以防止在JavaScript执行时触发click事件.

Link

如果您使用Angular2,这种方式有效:

Click me.

请参见/sf/ask/17360801/


"如果用户禁用了JavaScript,理想情况下会有一个真实的链接",它应该是一个有用的页面而不是#,即使它只是一个解释,该网站需要JS才能工作.至于失败,我希望开发人员在部署之前使用适当的浏览器功能检测等.
因此,在启用了JavaScript且支持该功能的用户代理中,运行JavaScript函数,对于指向页面顶部的链接,退回(对于JS因任何原因而失败的用户代理)?这很少是明智的后备.
我的网络应用程序旨在优雅地降级,因此链接仍然是一个有用的页面.除非您的网络应用程序是聊天客户端或交互式的东西,否则如果您花时间设计并考虑到降级,这应该可行.
问题是,如果myJsFunc引发错误,则不会为返回false捕获该错误。

7> fijter..:

如果你问我我也不会;

如果您的"链接"的唯一目的是运行某些JavaScript代码,则它不符合链接条件; 而是一段带有JavaScript功能的文本.我建议使用附加到它的标签onclick handler和一些基本的CSS来模仿链接.链接用于导航,如果您的JavaScript代码不用于导航,则它不应该是标记.

例:

function callFunction() { console.log("function called"); }
.jsAction {
    cursor: pointer;
    color: #00f;
    text-decoration: underline;
}

I want to call a JavaScript function here.



8> Steve Paulo..:

理想情况下你会这样做:

Link text

或者,更好的是,你在HTML中有默认的动作链接,你可以在DOM渲染后通过JavaScript不加干扰地将onclick事件添加到元素中,从而确保如果不存在/使用JavaScript你就不会让无用的事件处理程序摆脱你的代码,并可能使你的实际内容混淆(或至少分散注意力).



9> 小智..:

使用只是#做一些有趣的动作,所以我建议#self你使用,如果你想节省打字的努力JavaScript bla, bla,.


作为参考,"#self"看起来并不特别.任何与文档中任何元素的名称或ID不匹配的片段标识符(并且不是空白或"顶部")应该具有相同的效果.
我建议在另一条评论中建立`#void`约定,但实际上`#self`就是简短易记.任何东西都比`#`好
哇,赞成这个提示.从来不知道你可以使用`#self`作为命名标签,并避免令人讨厌的浏览器跳转到页面顶部的行为.谢谢.
但是如果你点击那个链接,用户在网址中看到"#void",看起来像是错误或错误,与#self或者其他相同,这将是奇怪的.

10> se_pavel..:

我使用以下内容

Link

代替

Link


此代码可能会导致较旧的IE出现意外情况.在某些时候它曾经用图像打破任何动画效果,包括翻转甚至GIF动画:https://groups.google.com/forum/#!topic/comp.lang.javascript/KfUlDry_ynY
我使用`javascript:`(没有分号),因为它在悬停状态栏中看起来最整洁.

11> Fczbkk..:

我同意其他地方的建议,说明你应该在href属性中使用常规URL ,然后在onclick中调用一些JavaScript函数.缺点是,他们会return false在通话后自动添加.

这种方法的问题是,如果函数不起作用或者如果有任何问题,链接将变得不可点击.Onclick事件将始终返回false,因此不会调用普通URL.

这是非常简单的解决方案.true如果函数正常工作,让函数返回.然后使用返回的值来确定是否应该取消单击:

JavaScript的

function doSomething() {
    alert( 'you clicked on the link' );
    return true;
}

HTML

link text

注意,我否定了doSomething()函数的结果.如果它有效,它将返回true,因此它将被否定(false)并且path/to/some/URL不会被调用.如果函数将返回false(例如,浏览器不支持该功能中使用的东西,或其他任何出错),它被否定,truepath/to/some/URL被调用.



12> Justin Johns..:

#比以前更好javascript:anything,但以下情况更好:

HTML:

For great justice

JavaScript的:

$(function() {
    $(".some-selector").click(myJsFunc);
});

您应该始终努力实现优雅降级(如果用户没有启用JavaScript ......以及何时使用规范和预算).此外,在HTML中直接使用JavaScript属性和协议被认为是不好的形式.



13> treat your m..:

我建议使用一个

TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有