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

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

or

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


当前回答

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

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

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

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

其他回答

我基本上是在用渐进式增强来解释这篇实用文章。简单的答案是,您永远不会使用javascript:void(0);或#,除非您的用户界面已经推断JavaScript已启用,在这种情况下,您应该使用JavaScript:void(0);。此外,不要使用span作为链接,因为这在语义上是错误的。

在应用程序中使用SEO友好的URL路由,例如/Home/Action/Parameters也是一种很好的做法。如果你有一个链接到一个没有JavaScript的页面,你可以在之后增强体验。使用指向工作页面的真实链接,然后添加联机事件以增强演示。

这是一个示例。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>

我使用javascript:void(0)。

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

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

但是他们忘记了在onclick中使用return doSomething(),而只使用doSometthing()。

避免#的第二个原因是最终返回为false;如果被调用的函数抛出错误,则不会执行。因此,开发人员还必须记住正确处理调用函数中的任何错误。

第三个原因是在某些情况下,onclick事件属性是动态分配的。我更希望能够调用函数或动态分配函数,而不必为一种或另一种连接方法专门编写函数代码。因此,我在HTML标记中的onclick(或任何东西)看起来像这样:

onclick="someFunc.call(this)"

OR

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

使用javascript:void(0)避免了上述所有麻烦,而且我还没有发现任何缺点的例子。

因此,如果你是一个独立的开发人员,那么你可以明确地做出自己的选择,但如果你是团队成员,你必须声明:

使用href=“#”,确保onclick始终包含return false;最后,任何被调用的函数都不会抛出错误,如果您将一个函数动态地附加到onclick属性,请确保它不会抛出错误并返回false。

OR

使用href=“javascript:void(0)”

第二种显然更容易沟通。

我会使用:

<a href="#" onclick="myJsFunc();return false;">Link</a>

原因:

这使得href变得简单,搜索引擎需要它。如果您使用其他任何东西(例如字符串),它可能会导致404未找到错误。当鼠标悬停在链接上时,它不会显示它是一个脚本。通过使用return false;,页面不会跳到顶部或断开后退按钮。

我看到了很多想继续使用#values for href的人的答案,因此,这里有一个答案,希望能让两个阵营都满意:

A) 我很高兴将javascript:void(0)作为我的href值:

<a href="javascript:void(0)" onclick="someFunc.call(this)">Link Text</a>

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>

注意,如果您知道链接不会动态创建,请改用单击功能:

$('a[href=“#”]').click(函数(e){

我想说,最好的方法是将href锚定到一个你从未使用过的ID上,比如#Do1Not2Use3This4Id5或类似的ID,你100%确信没有人会使用,也不会冒犯他人。

Javascript:void(0)是一个坏主意,违反了启用CSP的HTTPS页面上的内容安全策略https://developer.mozilla.org/en/docs/Security/CSP(感谢@jakub.g)仅使用#将使用户在按下时跳回到顶部如果未启用JavaScript,则不会破坏页面(除非您有JavaScript检测代码如果启用了JavaScript,则可以禁用默认事件除非你知道如何阻止浏览器选择某些文本,否则你必须使用href(不知道使用4是否会消除阻止浏览器选择文本的因素)

基本上没有人在这篇文章中提到5,我认为这很重要,因为如果你的网站突然开始围绕链接进行选择,它会显得不专业。