在函数中引用(this)

时间:2010-05-12 09:08:02

标签: javascript jquery function

我有动态html生成的元素,我想引用当其中一个人可能正在调用它时调用该函数的特定href。

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

当我尝试引用$(this)时不起作用。有没有其他方法可以做到这一点,还是我必须制作动态ID?

3 个答案:

答案 0 :(得分:5)

如果您想传递href,

<a href="javascript:Foo(this.href)">Link</a>将起作用。

然而,html代码中的某些处理程序根本不是jqueryish。 为您的链接提供一个类并设置一个实时处理程序:

$('.mylink').live('click', function() {
    // do whatever you want with this or $(this) or this.href or $(this).attr('href')
});

答案 1 :(得分:1)

将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。事件对象具有对source元素的引用,可以是标准浏览器中的target,也可以是IE中的srcElement。最后的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>

答案 2 :(得分:-1)

使用javascript:伪协议处理程序没有意义 使用

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

代替。