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アクセスできるようになり、それからviaを呼び出します(これにより、関数の呼び出し中に渡される最初の引数が作成されます)。(これは、jQueryが舞台裏で行うことであり、クロージャを作成し、orを介して関数を呼び出しますが、とにかくクロージャが横たわっているので、それを直接使用することもできます。それでも、Chandu への +1は完全に問題ありませんこれを行う方法。)elmdosomethingFunction#callcallthis$.proxyFunction#callFunction#apply$.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 に答える