2

我有:

    function dosomething(data) {
    alert($(this).attr('class'))
    $(this).children('img').attr('title', data) 
}

$('.test').bind('mouseover', function() {
    $.get('/inc/ajax-function.asp?action=check', dosomething);

})

现在这显然行不通。我想做的是:

当调用 .get 时,将 rresult 放入数据(这有效)并将结果放在 img 的标题中,该标题是您鼠标悬停的链接的子项。如何获取函数的 $(this) 值?

<a class='test' href='book.asp><img src='image.gif' title='' /></a>

感谢您提供2个很好的解决方案。我不知道在这种情况下使用哪个“更好”更快,更“标准”。

4

2 回答 2

7

您可以为此使用 jQuery 代理功能: http: //api.jquery.com/jQuery.proxy/

试试这个:

$('.test').bind('mouseover', function() {
    $.get('/inc/ajax-function.asp?action=check', $.proxy(dosomething, this));
})
于 2012-07-11T13:00:46.937 回答
7

使用您已经为mouseover处理程序创建的闭包:

$('.test').bind('mouseover', function() {
    var elm = this;
    $.get('/inc/ajax-function.asp?action=check', function(data) {
        dosomething.call(elm, data);
    });
});

您的get回调将可以访问elm本地,然后我们调用dosomethingvia Function#call(这使得我们传递的第一个参数callthis在调用函数期间)。(这是 jQuery$.proxy在幕后为您所做的,创建一个闭包并通过Function#callor调用该函数Function#apply,但由于无论如何您都有一个闭包,不妨直接使用它。不过,+1 到 Chandu,$.proxy非常好方法来做到这一点。)

或者修改你dosomething的接受元素作为参数,你不必使用Function#call

function dosomething(elm, data) {
    alert($(elm).attr('class'))
    $(elm).children('img').attr('title', data) 
}

$('.test').bind('mouseover', function() {
    var elm = this;
    $.get('/inc/ajax-function.asp?action=check', function(data) {
        dosomething(elm, data);
    });
});
于 2012-07-11T13:01:03.987 回答