1
function showMember() {
    $.ajax({
        type: 'get',
        url: '<?php echo $this->createUrl('member'); ?>',
        data: {
            index: $('#members fieldset').length
        },
        cache: false,
        dataType: 'html',
        success: function (html) {
            $('#members').append(html);
        }
    });
}

$(function () {
    showMember();
    $('.addMember').on('click', function () {
        showMember();
        //length+1 ???
        if ($('#members fieldset').length + 1 > 2) {
            $(this).hide();
        }
    });
});

クリック時$('#members fieldset').lengthの呼び出しによって追加されたフィールドセットを考慮しないのはなぜですか?showMember();

$('#members fieldset').length+1 を追加しないようにするために、これを知る方法はありますか?

ありがとう。

更新:以下の回答に基づく新しいコードは次のとおりです。

$(function() {
   showMember();
   $('.addMember').on('click', function() {
        showMember().done(function() {
            alert('hi there');
            if($('#members fieldset').length > 2) {
              $(this).hide();
            }
        });
   });    
});  

に入力していないようで.done(function何も alert()表示されません。

再度、感謝します。

4

3 に答える 3

3

AJAX 要求が終了した後にコードが実行されることを確認する必要があります。これを行う最も簡単な方法は、promise オブジェクトを返し、成功イベントの別のハンドラーをアタッチすることです。

function showMember() {
    return $.ajax({
        type: 'get',
        url: '<?php echo $this->createUrl('
        member '); ?>',
        data: {
            index: $('#members fieldset').length
        },
        cache: false,
        dataType: 'html',
        success: function(html) {
            $('#members').append(html);
        }
    });
}

$(function() {
    showMember();
    $('.addMember').on('click', function() {
        showMember().done(function() {}
        if($('#members fieldset').length + 1 > 2) {
            $(this).hide();
        });
    });
});

良い点は、done()コールバックも同じ引数を受け取るsuccessため、必要に応じてそこで応答にアクセスできることです。

于 2013-04-26T12:38:58.677 に答える
0

他の答えは私を打ち負かしましたが、ここに提供する別の選択肢があります

function showMember() {

    var THIS = this; // <------ note this

    $.ajax({
        type: 'get',
        url: '<?php echo $this->createUrl('member'); ?>',
        data: {
            index: $('#members fieldset').length
        },
        cache: false,
        dataType: 'html',
        success: function (html) {
            $('#members').append(html);
            if ($('#members fieldset').length + 1 > 2) {
                $(THIS).hide();
            }
        }
    });
}

$(function () {
    showMember();
    $('.addMember').on('click', function () {
        showMember.apply(this); // <--- and note this
    });
});
于 2013-04-26T13:06:29.733 に答える
0

if ステートメントは、ajax が完了するまで待機しないためです。おそらく、HTML が追加される前にカウントが実行されます。if 関数を setTimeout に入れるか、html を追加した直後に ajax コールバック内でコードを実行します。

于 2013-04-26T12:36:28.980 に答える