代码之家  ›  专栏  ›  技术社区  ›  Sara Chipps

在函数中引用(this)

  •  3
  • Sara Chipps  · 技术社区  · 14 年前

    我有动态HTML生成的元素,我想引用调用函数的特定Href,当许多Href中的一个调用它时。

    <a href="javascript:Foo(this)">Link</a>
    

    当我试图引用$(this)时不起作用。有没有其他方法可以这样做,或者我必须创建动态ID?

    3 回复  |  直到 14 年前
        1
  •  5
  •   ThiefMaster    14 年前

    <a href="javascript:Foo(this.href)">Link</a> 如果你想通过Href,就可以了。

    但是,HTML代码中的onsometing处理程序根本不是jqueryish。 给链接一个类并设置一个活动处理程序:

    $('.mylink').live('click', function() {
        // do whatever you want with this or $(this) or this.href or $(this).attr('href')
    });
    
        2
  •  1
  •   lincolnk    14 年前

    将JS部件放入 href 属性是个坏主意。最佳实践是使用 addEventListener 但在这里你可以摆脱设置 onclick 直接。

    <a href="#" onclick="Foo(event);">Link</a>
    

    你的功能是

    function Foo(e) {
    
        var a = e.target || e.srcElement;
    
        // TODO: stuff
    
        if (e.preventDefault) {
            e.preventDefault();
        }
        else {
            return false;
        }
    }
    

    所以当你点击链接时, Foo 以事件作为参数调用。事件对象引用了源元素,可以是 target 在标准浏览器中或 srcElement 在I. preventDefault / return false; 结尾的组合框防止浏览器“跟踪”链接到。

    编辑:第二种想法是,由于您有许多链接,使用jquery添加处理程序的建议方法可能更好(尽管第一种解决方案仍然很好)。

    ...
    <a id="A5" href="#" >Link</a>
    <a id="A6" href="#" >Link</a>
    <a id="A7" href="#" >Link</a>
    ...
    
    <script>
    $('a').click(Foo);
    </script>
    
        3
  •  -1
  •   Sean Kinsey    14 年前

    没有必要使用 javascript: 伪协议处理程序。
    使用

    <a href="#" onclick="Foo(this);">Link</a>
    

    相反。