3

データベースを更新するために別のファイルへのリクエストを作成するこの機能があります。

$('#thumb-up').live('click', function() {
    $('#loading').show();

    $.ajax({
            context: this,
            type: 'GET',
            url: '/gallery/configurations/required/photo-thumbs.php',
            data: 'i=21&t=1',
            success: function() {
                                  $('#loading').hide();
                                  $(this).attr('id', 'thumbup-undo').text('Sluta gilla');
                                  $('#thumbup-count').load('/gallery/configurations/required/thumbup-count.php?i=21&t=1');
                                 }
    });
});

$('#thumbup-undo').click(function() {
    alert('das');
});

ID のリンクをクリックすると、thumb-up期待どおりにテキストが「Sluta gilla」に変わります。このリンクをクリックすると、同じタグの ID が から に変更されthumb-upthumbup-undoアラート「dsa」が表示されます。ここでの問題は、表示されないことです。変わるかどうかさえわかりませんthumbup-undoが、変わらないことを期待しています。

ここでコードを試すことができます(デモが正しく動作するようにコードを短縮しました)。

この問題を解決するにはどうすればよいですか?

前もって感謝します

4

4 に答える 4

2

このデモをお試しください http://jsfiddle.net/kxLzu/

私はクリックをバインドするために使用.propし、成功すると、このクリックが存在することを伝えています。.onfoo

それが役に立てば幸い :)

注意:.liveは非推奨であり、.on代わりに使用する必要があります。

コード

    $('#thumb-up').click(function() {
        $.ajax({
                context: this,
                type: 'GET',
                success: function() {
                       $(this).prop('id', 'thumbup-undo').text('Sluta gilla');
                      foo();
                                     }
        });
    });

function foo(){
    $('#thumbup-undo').on('click', function() {
        alert('das');
    });
}
​
于 2012-06-15T22:33:34.393 に答える
2
$('body').on('click','#thumb-up', function() {
    $('#loading').show();

    $.ajax({
            context: this,
            type: 'GET',
            url: '/gallery/configurations/required/photo-thumbs.php',
            data: 'i=21&t=1',
            success: function() {
                                  $('#loading').hide();
                                  $(this).attr('id', 'thumbup-undo').text('Sluta gilla');
                                  $('#thumbup-count').load('/gallery/configurations/required/thumbup-count.php?i=21&t=1');
                                 }
    });
});

$('body').on('click','#thumbup-undo', function() {
    alert('das');
});

ページの読み込み後に「新しい」要素が dom に追加されるため、ON を使用する必要があります。覚えておいてください.liveはJqueryの最新バージョンでは非推奨です

于 2012-06-15T22:36:51.250 に答える
0

問題は、割り当ての時点で、$("#thumbup-undo")存在しないことです。後で作成されるだけです。

この更新されたFiddle.live()のように、を使用してこれを回避できます。

于 2012-06-15T22:32:28.737 に答える
0

(クリックハンドラーを作成するときに存在しないため、例では問題があるため) および(jquery 1.7で非推奨になっているため)の代わりに.onを使用します。
.click()#thumbup-undo
.live()live()

于 2012-06-15T22:33:09.777 に答える