0

私は次のコードを持っています:

$('#refresh').click(function () {

    alert($('.report-container').length);

    $('.report-container').each(function () {

        var accordian = this;
        var url = $(this).children(':first-child').val();

        $('form').ajaxSubmit({
            url: url,
            success: function (responseText, statusText, xhr, $form) {
                $(accordian).html(responseText);
            }
        });

    });
});

これは基本的に、ページ上の各表形式のレポートを取得し、ユーザーが構成したフォームを使用してそれらを更新します。

これにより、唯一の「.report-container」要素がサーバーからダウンロードされたフラグメントに置き換えられると思います。ただし、これが実行されるたびに、への呼び出しalert($('.report-container').length);が増分されますか?

これはあらゆる種類の問題を引き起こしています-私は何が欠けていますか?

ftr私もajaxFormプラグインのターゲットプロパティを使用してみましたが、同じ結果になりました

また、サーバーがフラグメント内の1つだけの「.report-container」で応答することを確認できるため、1->1の置換である必要があります。

4

2 に答える 2

1

要素を置き換えるには、を使用します.replaceWith()

html()要素の内容を置き換えます。したがって、交換後は次のようになります。

<div class="report-container">
    <div class="report-container">

        ....

    </div>
</div>
于 2012-02-16T13:27:31.973 に答える
1

本当にコンテナが1つしかない場合、それは置き換えられます。

$('#refresh').click(function() {
    var container = $('.report-container');
    var url = container.children(':first-child').val();
    $('form').ajaxSubmit({
        url: url,
        success: function(responseText, statusText, xhr, $form) {
            container.replaceWith(responseText);
        }
    });
});

複数に拡張したい場合は、それぞれを保持/追加しますが、selectを「accordian」にキャッシュします。

$('#refresh').click(function() {
    $('.report-container').each(function() {
        var accordian = $(this);
        var url = accordian.children(':first-child').val();
        $('form').ajaxSubmit({
            url: url,
            success: function(responseText, statusText, xhr, $form) {
                accordian.replaceWith(responseText);
            }
        });
    });
});
于 2012-02-16T13:37:22.357 に答える