繁体   English   中英

在Symfony2中由ajax提交表单

[英]submit form by ajax in Symfony2

我有什么行动,首先需要通过ajax呈现表单,然后需要更新现有值。 我已经获得了具有适当值的呈现表单,但是当我单击以ajax提交表单时,我无法阻止表单提交,我有以下脚本:

 $('#edit-comment').click(function (e) {
    e.preventDefault();
    console.log(1);
});

但是顺服还是可以的! 我做错了。 而且我不知道在编辑操作中如何处理提交的表单。 这是其中的现有部分:

 /**
 * @Route("/edit/comment", name="chat_edit", options={"expose"=true})
 */
public function editAction(Request $request)
{
    $comment_id = json_decode($request->getContent(), true)['commentId'];
    $comment = $this->get('comment.repository')->find($comment_id);
    $form = $this->createForm(new CommentType(), $comment);

    return $this->render("ChatCommentBundle:Comment:form.html.twig",
        array('form' => $form->createView())
    );
}

链接到表单类型的要点

更新:

原始答案(如下)仍然适用,但是鉴于该表单实际上是使用AJAX加载的,因此您不能在$(document).ready回调中绑定事件侦听器。 最好的选择是使用事件委托。 这是通过将事件侦听器附加到确实存在的DOM元素上来完成的,但是让该侦听器为可能在以后添加的元素选择事件。 例如:body元素将始终存在,因此您可以在此侦听表单提交,无论该表单是否存在无关紧要:

$('body').on('submit', '#form-id', function(e)
{
    console.log('#form-id was submitted, do AJAX => submission stopped');
    return false;
    //or
    e.preventDefault();
    e.stopPropagation();
});

在此很好地解释为什么以及如何工作。 归结为以下事实:所有事件都通过目标节点的所有父DOM元素,因此您可以在DOM中的任何位置附加侦听器,并在事件到达目标之前对其进行处理。
我认为我的这个旧答案也可以解释一两个问题。 它不使用jQ,但包含jQ内部用于委派的代码的简化版本。


您可以防止click事件对$('#edit-comment')的默认影响,但是该事件仍会传播到表单。 您可能还想添加e.stopPropagation() 或者简单地return false; 从回调中进行(这将防止默认设置停止传播)。

但是,防止提交表单的更好方法是使用submit事件,然后在此处停止提交:

$('#form-id').on('submit', function(e)
{
    console.log('Do ajax call here');
    return false;
    //or
    e.preventDefault();
    e.stopPropagation();
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM