0

ご覧のとおり、さまざまな要素を取得してイベントをバインドするために、各「li」をループしています。関数 refreshThis() は、ajax からのコールバックが成功した後に呼び出され、dom を「リロード」し、各要素を再度取得してクリック イベントをバインドします。

私が実行した場合:

console.log($(this).hasClass('expanded'));

複数の「true」と「false」が表示されます。クリックイベントが複数回バインドされているようです。

コールバックで refreshThis() を実行しないと、クリックが機能しません。私はこのような .on を使用してみました:

$('#nearestStaticDIV').on('click', $fetchComments, function() {

それ以外の

$fetchComments.click(function() {

これにより、すべてのクリックが一度にトリガーされます。

DOM を更新した後でも、hasClass を正しく動作させるにはどうすればよいですか?

ありがとうございました!:)

非常に単純化されたコード:

function refreshThis(){

$postlist.children('li').each(function() {

var list = $(this);
var $fetchComments = list.find('h1'); // click this to fetch replies

function fetchReplies() {
...
}

$fetchComments.click(function() { // fetch replies

    if ($(this).hasClass('expanded')) { 
        ...
    } else {
        fetchReplies();
    }

});

$commentPostBtn.click(function(event) {

        $.ajax({
            ...
            success: function(data) {
                refreshThis();
        });
    }
    event.preventDefault();
});

});
}

refreshThis();
4

0 に答える 0