代码之家  ›  专栏  ›  技术社区  ›  Beska

我可以告诉你在JavaScript中点击的超链接吗?

  •  0
  • Beska  · 技术社区  · 17 年前

    如果我有这样的代码:

    <script>
    function determine()
    {
        // ????
    }
    </script>
    
    <a href="blah1" onclick="determine()">blah1</a>
    <a href="blah2" onclick="determine()">blah2</a>
    

    determine()

    (是的,我知道,简单而正确的做法就是通过 this

    我可能应该在一开始就提到这一点。..我们的网站目前没有使用(暂时也不能使用)jQuery,所以jQuery的答案(虽然对这类问题总体上很有价值)实际上对我没有帮助。

    6 回复  |  直到 4 年前
        1
  •  4
  •   Geoff    17 年前

    link

    function doSomething(e) {
        var targ;
        if (!e) var e = window.event;
        if (e.target) targ = e.target;
        else if (e.srcElement) targ = e.srcElement;
        if (targ.nodeType == 3) // defeat Safari bug
            targ = targ.parentNode;
    }
    
        2
  •  2
  •   swilliams    17 年前

    你可以直接使用JavaScript,但我更喜欢使用类似jQuery的东西:

    <a href="blah1">blah1</a>
    
    <script type="text/javascript">
      $('a[href=blah1]').click(function() {
        var link = $(this); // here's your link.
        return false; // acts like the link was not clicked. return true to carry out the click.
      });
    </script>
    

    $().click() 功能, $(this)

        3
  •  1
  •   BarelyFitz    17 年前

    如果你不能在HTML中更改onclick=“determine()”,但你可以更改determined()函数,那么我认为你最好的选择是:

    将determine()函数留空,这样它就不会做任何事情。

        4
  •  0
  •   Ozzy    17 年前

    你可以像这样向每个链接添加事件

    links = document.getElementsByTagName('a');
    
    for (link in links) {
    
       link.onclick = function() {
          alert(this.id);
          determine(); // or some other important code?
       }
    
    }
    
        5
  •  0
  •   BarelyFitz    17 年前

    另一种解决方案:

    如果你只想为那些已经有onclick=“determine()”的链接运行代码,这可能会很有用——你可以设置determined()函数来设置一个变量。然后,当用户点击链接时,determine()函数会运行以设置变量,当文档点击处理程序运行时,您可以检查变量,然后您就会知道链接有onclick=“determine”。

    如果我能让你觉得这有点复杂,请告诉我。.. :-)

        6
  •  0
  •   Christoph    17 年前

    如果你不能改变 onclick

    // use a DOMContentLoaded hack or `onload` as fallback
    onload = function() {
        var links = document.links;
        for(var i = 0; i < links.length; ++i) {
            // there might be a better way to check which links to modify
            // don't know without further details
            if(/determine\(\)/.test(links[i].onclick))
                links[i].onclick = determine;
        }
    };
    
    function determine() {
        // the link is now available as `this`
        alert(this.href);
    }
    

    也许更好的解决方案是采用全球IE风格的补丁 event

    if(document.addEventListener) {
        document.addEventListener('click', function(e) {
            window.event = e;
        }, true);
    }
    
    function determine() {
        var src = event.target || event.srcElement;
        alert(src.href);
    }