如何使用链接来调用JavaScript?

Jin*_*ong 158 javascript

如何使用链接调用JavaScript代码?

End*_*ssa 194

不引人注目的JavaScript,没有库依赖:

<html>
<head>
    <script type="text/javascript">

        // Wait for the page to load first
        window.onload = function() {

          //Get a reference to the link on the page
          // with an id of "mylink"
          var a = document.getElementById("mylink");

          //Set code to run when the link is clicked
          // by assigning a function to "onclick"
          a.onclick = function() {

            // Your code here...

            //If you don't want the link to actually 
            // redirect the browser to another page,
            // "google.com" in our example here, then
            // return false at the end of this block.
            // Note that this also prevents event bubbling,
            // which is probably what we want here, but won't 
            // always be the case.
            return false;
          }
        }
    </script>
</head>
<body>
    <a id="mylink" href="http://www.google.com">linky</a>        
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

  • 你能解释一下为什么这比当前接受的答案要好,脚本应该放在页面里(因为这显然是一个初学者级别的问题)? (24认同)
  • 当然可以.更新. (8认同)
  • 那么如果我不想重定向用户而只是想运行一些代码,我会为`href`添加什么?编辑:我看到它可以留空:`href =""`. (6认同)
  • 如果您担心的一个问题是您不希望将功能工作单元分离到源文件中的不同物理位置,或者分散在许多源文件中,那该怎么办?如果你在一个href标签中放了一个javascript调用,那么通过查看一行发生的事情是非常清楚的.我会担心将这些功能分成不同的物理位置,在这些地方很难得到正在发生的事情.也许这只是我的风格. (6认同)
  • 为什么通过`window.onload`添加`onclick`事件更好,而不是将`onclick`直接放在`<a>`标签中? (5认同)
  • 它不会重定向浏览器.您应该将真实的URL放在href中,即使您的javascript将替换该操作.这样,如果他们没有启用JavaScript,您的链接仍然有效. (4认同)
  • 如果元素 ID 是动态的怎么办?这仅在您知道 ID 是什么时才有效。 (3认同)
  • 稍加思考,我并不反对整个想法,但我认为在某个时候(这是一个案例),您可以将其推得太远。 (3认同)
  • 这会重新加载页面,因此重置其他表单元素.使用"链接"实现来运行JavaScript确实需要重新加载页面. (2认同)
  • 您可以使用`document.getElementsByClassName`代替. (2认同)

Che*_*sea 178

<a onclick="jsfunction()" href="#">
Run Code Online (Sandbox Code Playgroud)

要么

<a onclick="jsfunction()" href="javascript:void(0);">
Run Code Online (Sandbox Code Playgroud)

编辑:

上面的回答确实不是一个好的解决方案,自从我最初发布以来已经学到了很多关于JS的知识.有关解决此问题的更好方法,请参阅下面的EndangeredMassa答案.

  • 这是1998年的代码.使用其中一个不引人注目的解决方案.请. (24认同)
  • 我推荐第二个,因为第一个滚动到页面顶部. (11认同)
  • 是的,它肯定会,除非你添加"返回假"; 在你的功能之后. (7认同)
  • 不要用任何一个!链接用于链接,它们不是调用javascript的虚拟元素. (7认同)
  • 如果你要将javascript内联这样做:<a onclick="jsfunction;return false" href="linkasnormal"> (4认同)
  • 你应该提到jsfunction需要调用括号.即`onclick ="jsfunction()"`,否则,它将不会做任何事情,因为我从[问题](http://stackoverflow.com/q/16944982/1385198)的问题中学到了问题,尽管答案是不理想(现在很老),我提到它是为了避免像我一样混淆别人. (3认同)

Mat*_*nde 42

<a href="javascript:alert('Hello!');">Clicky</a>
Run Code Online (Sandbox Code Playgroud)

编辑,多年后:不!不要这样做!我当时年少无知!

  • 你已经长大了马特.我以你为荣. (49认同)
  • 也许用这种方法描述一些问题?这比`onclick`中的`href ='#'和`alert()`更糟糕吗? (16认同)
  • 快速解释为什么*"不要这样做!"*真的很受欢迎...... (9认同)
  • 我认为人们在你的答案中赞成编辑:) (3认同)
  • 我是javascript的新手,不明白这有什么问题..任何解释都会很好 (3认同)

Mis*_*cky 42

而且,为什么不用jQuery不引人注目:

  $(function() {
    $("#unobtrusive").click(function(e) {
      e.preventDefault(); // if desired...
      // other methods to call...
    });
  });
Run Code Online (Sandbox Code Playgroud)

HTML

<a id="unobtrusive" href="http://jquery.com">jquery</a>
Run Code Online (Sandbox Code Playgroud)

  • 因为不是每个人都使用jquery. (10认同)
  • 这是否适用于搜索引擎优化,爬虫将找到链接并遵循它? (2认同)

Fir*_*row 10

不引人注目的Javascript有许多优点,这里有它采取的步骤以及为什么它的使用是好的.

  1. 链接正常加载:

    <a id="DaLink" href="http://host/toAnewPage.html">点击此处</a>

这很重要,因为它适用于未启用javascript的浏览器,或者如果javascript代码中的错误不起作用.

  1. javascript在页面加载时运行:

     window.onload = function(){
            document.getElementById("DaLink").onclick = function(){
                   if(funcitonToCall()){
                       // most important step in this whole process
                       return false;
                   }
            }
     }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如果javascript成功运行,可能使用javascript加载当前页面中的内容,返回false会取消链接触发.换句话说,如果javascript成功运行,put return false会禁用链接.虽然允许它运行,如果javascript没有,做一个很好的备份,以便您的内容以任何方式显示,搜索引擎和您的代码中断,或在非JavaScript系统上查看.

关于这个主题的最好的书是Jeremy Keith的"Dom Scription"


Mar*_*iek 9

或者,如果您正在使用PrototypeJS

<script type="text/javascript>
  Event.observe( $('thelink'), 'click', function(event) {
      //do stuff

      Event.stop(event);
  }
</script>

<a href="#" id="thelink">This is the link</a>
Run Code Online (Sandbox Code Playgroud)

  • @Andrew:请留下评论和你的downvote解释为什么内联答案是坏的. (5认同)
  • 不引人注目,我喜欢它! (2认同)

Dav*_*d Z 8

我想你可以使用这样的onclick事件:

<a onclick="jsFunction();">
Run Code Online (Sandbox Code Playgroud)