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

函数myJsFunc(){警报(“myJsFunc”);}<a href=“#”onclick=“myJsFunc();”>运行JavaScript代码</a>

or

函数myJsFunc(){警报(“myJsFunc”);}运行javascript代码</a>


当前回答

您不应该在HTML中使用inline onclick=“something();”,以避免用无意义的代码污染它;所有单击绑定都必须在Javascript文件(*.js)中设置。

像这样设置绑定:$(“#myAnchor”).click(function(){…**return false**;});或$('#myAnchor').bind('click',function(){…**return false**;});

然后,您就可以轻松加载一个干净的HTML文件(并且seo友好),而无需数千href=“javascript:void(0);”,只需href=“#”

其他回答

#比javascript:任何东西都好,但以下内容甚至更好:

HTML格式:

<a href="/gracefully/degrading/url/with/same/functionality.ext" class="some-selector">For great justice</a>

JavaScript:

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

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

因此,当您使用<a/>标记执行某些JavaScript操作时,如果您也放入href=“#”,则可以在事件末尾添加return false(如果是内联事件绑定),如:

<a href="#" onclick="myJsFunc(); return false;">Run JavaScript Code</a>

或者您可以使用JavaScript更改href属性,如:

<a href="javascript://" onclick="myJsFunc();">Run JavaScript Code</a>

or

<a href="javascript:void(0)" onclick="myJsFunc();">Run JavaScript Code</a>

但从语义上讲,上述所有实现这一点的方法都是错误的(尽管它很好)。如果没有创建任何元素来导航页面,并且有一些JavaScript内容与之相关,那么它不应该是<a>标记。

您可以根据需要简单地使用<button/>来做事情或任何其他元素,如b、span或任何适合的元素,因为您可以在所有元素上添加事件。


因此,使用<a href=“#”>有一个好处。在执行a href=“#”时,默认情况下会在该元素上获得光标指针。为此,我认为您可以使用CSS,比如cursor:pointer;这也解决了这个问题。

最后,如果您从JavaScript代码本身绑定事件,那么如果您使用的是<a>标记,则可以使用event.prpreventDefault()来实现这一点,但如果您没有使用<a>标签,则可以获得一个优势,您不需要这样做。

所以,如果你看到了,最好不要对这种东西使用标签。

我个人将它们结合使用。例如:

HTML

<a href="#">Link</a>

使用一点jQuery

$('a[href="#"]').attr('href','javascript:void(0);');

or

$('a[href="#"]').click(function(e) {
   e.preventDefault();
});

但我使用它只是为了防止用户单击空锚点时页面跳到顶部。我很少在HTML中直接使用onClick和其他on事件。

我的建议是将<span>元素与class属性一起使用,而不是锚。例如:

<span class="link">Link</span>

然后将函数分配给.link,其中包含一个封装在body中的脚本,该脚本位于</body>标记之前或外部JavaScript文档中。

<script>
    (function($) {
        $('.link').click(function() {
            // do something
        });
    })(jQuery);
</script>

*注意:对于动态创建的元素,请使用:

$('.link').on('click', function() {
    // do something
});

对于使用动态创建元素创建的动态创建元素,请使用:

$(document).on('click','.link', function() {
    // do something
});

然后,您可以将span元素设置为看起来像带有一点CSS的锚点:

.link {
    color: #0000ee;
    text-decoration: underline;
    cursor: pointer;
}
.link:active {
    color: red;
}

下面是上面提到的jsFiddle示例。

为了完整起见,这里还有一个选项,即使禁用了JavaScript,也可以阻止链接执行任何操作,而且很短:)

<a href="#void" onclick="myJsFunc()">Run JavaScript function</a>

如果该id不在页面上,则链接将不起作用。

一般来说,我同意Aaron Wagner的回答,JavaScript链接应该与JavaScript代码一起注入到文档中。

肯定hash(#)更好,因为在JavaScript中它是一个伪方案:

污染历史实例化引擎的新副本在全局范围内运行,不尊重事件系统。

当然,使用onclick处理程序防止默认操作的“#”更好。此外,唯一目的是运行JavaScript的链接并不是真正的“链接”,除非当出现问题时,您将用户发送到页面上某个合理的锚点(只需#将发送到顶部)。您可以简单地使用样式表模拟链接的外观,而完全不用考虑href。

此外,关于牛神的建议,特别是:。。。href=“javascript_required.html”onclick=“…这是一种很好的方法,但它没有区分“禁用javascript”和“onclick失败”场景。