ajaxSubmit目标被复制而未被替换

时间:2012-02-16 13:17:27

标签: javascript jquery ajax ajaxform

我有以下代码:

$('#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插件上使用target属性,结果相同

我还可以确认服务器响应片段中只有一个'.report-container',因此它应该是1 - > 1替换。

2 个答案:

答案 0 :(得分:1)

要使用.replaceWith()替换元素。

html()替换元素的内容。所以在更换后你会得到:

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

        ....

    </div>
</div>

答案 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);
        }
    });
});

如果您希望扩展到多个,请保留/添加每个,但将选择缓存在“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);
            }
        });
    });
});