如何使用 jquery/ajax 正确刷新包含表单的 div?

Posted

技术标签:

【中文标题】如何使用 jquery/ajax 正确刷新包含表单的 div?【英文标题】:How do I properly refresh a div, with jquery/ajax, that contains a form? 【发布时间】:2012-02-15 19:27:46 【问题描述】:

我已经写出了我所有的代码。我不完全确定您是否需要看到它才能获得想法。

基本上我用的是基本款:

$("#formToLoadPageInto").load("thePageToLoad.php").fadeIn("fast");

现在,一切正常,但加载的页面有一个表单。它在必须使用该负载之前第一次工作(提交表单),但之后(使用该代码重新加载时)重新加载的页面上的表单不再提交。 我读过你不应该在$(document).ready(function() 正文中放置类似的东西,但它实际上一直不在此范围内。所以我真的不确定有什么问题。

一切都基于不刷新页面。到目前为止,我已经成功地做到了这一点,但是这个问题(以及一些相关问题)阻碍了我!希望有人能帮帮我..

编辑:

也许这会有所帮助:

我有 2 个不同的 div——“发表评论”和“发表的 cmets”。

post comment div 有一个提交评论的表单。这是一个加载到 div 中的 php 页面。这工作正常。提交表单时,它使用以下代码:

$("#newpost").validate(
        debug: false,
        submitHandler: function(form) 
            // do other stuff for a valid form
            $.post('postthought.php', $("#newpost").serialize(), function(data) 
                $('#hideload').html(data);
            );
        
);

运行后,我尝试使用

$("#formToLoadPageInto").load("thePageToLoad.php").fadeIn("fast");

如前所述。它可以工作并显示新内容,但我无法使用此页面上的表单查看或删除 cmets..

希望这不会太令人困惑..

【问题讨论】:

那么,您的 ajax 响应中的内容是否也包含表单?否则,表单将被破坏。 您是否将整个页面加载到"#formToLoadPageInto" 中? "#formToLoadPageInto" 是 ID 所暗示的 <form> 元素吗?换句话说,您是否将<form> 放在<form> 中? 不,表单没有被重新加载到表单中,它正在被重新加载到 div 中.. 【参考方案1】:

听起来“posted cmets” div(其中包含一个用于查看/编辑的新表单)很好地插入到 DOM 中,但是您没有初始化它的 javascript 控件。

例如,如果表单有一个 cmets 列表和每个 cmets 的“编辑”按钮,则 DOM 就绪处理程序中的类似内容将起作用:

$('#formToLoadPageInto').on('click','form input[name="editButton"]', function() 
    var $this = $(this);
    var formData = 
        commentID: $this.val(), 
        commentBody: $this.siblings('textarea').text()
    ;
    $.post('editComment.php', formData, function(response) 
        //....
    );
);

(这使用委托将单个事件处理程序“预先连接”到与给定选择器匹配的所有当前和随后插入的控件。)

【讨论】:

【参考方案2】:
$("#formToLoadPageInto").empty().load("thePageToLoad.php?" + Math.random()).fadeIn("fast");

【讨论】:

@user1162534 防止缓存的随机数 那里不应该有一个问号,最好是在php扩展和随机数之间? 我一直远离网址末尾的“php?=”。到目前为止一切顺利,我想保持这种状态。还有其他建议吗?【参考方案3】:

如果表单本身被替换,您需要为表单提交重新应用处理程序,或者使用委托给未被替换的元素(可能是文档本身)的处理程序。

$('#formToLoadPageInto').on('submit','form', function() 
     ... do submission...
     $('#formToLoadPageInto').load('thePageToLoad.php').fadeIn('fast');
);

【讨论】:

以上是关于如何使用 jquery/ajax 正确刷新包含表单的 div?的主要内容,如果未能解决你的问题,请参考以下文章

jquery如何实现form提交无刷新返回一个页面

在 codeigniter 中使用 jquery ajax 进行表单验证

Grails JQuery Ajax 表单验证

如何修复 JSON、jQuery、AJAX 和 PHP 之间的错误

无需刷新页面如何使用 ajax/jQuery 显示数据库中的值

从 PHP (jQuery/AJAX) 插入 MySQL