Javascript 在Symfony中提交表单后如何关闭窗口选项卡?
我正在窗口选项卡中提交一个symfony表单。提交表单后,“提交”按钮应关闭窗口,并刷新打开页面。所以我使用jquery来完成这部分Javascript 在Symfony中提交表单后如何关闭窗口选项卡?,javascript,php,jquery,symfony,twig,Javascript,Php,Jquery,Symfony,Twig,我正在窗口选项卡中提交一个symfony表单。提交表单后,“提交”按钮应关闭窗口,并刷新打开页面。所以我使用jquery来完成这部分 $('#submitAndClose').on('submit', function () { setTimeout( function () { opener.location.reload(true); window.close(); } , 3000); }) 但我想,因为symfony在提交
$('#submitAndClose').on('submit', function () {
setTimeout(
function () {
opener.location.reload(true);
window.close();
}
, 3000);
})
但我想,因为symfony在提交子项后刷新页面,jquery无法正常工作
这是我在SymfonForm中的提交按钮:
->add('saveAndClose', SubmitType::class, [
'label' => 'Save and close',
])
下面是细枝部分:
{{ form_widget(form.saveAndClose, {
attr: {
id: 'submitAndClose',
}
}) }}
这是控制器部件,请参阅更多信息:
/**
* @param Request $request
* @param int $id
*
* @return Response
*
* @Route("/{id}", methods={"GET", "POST"})
*/
public function editAction(
Request $request,
int $id
): Response {
$user = $this->em->getRepository(User::class)->find($id);
$form = $this->createForm(UserType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->em->flush();
}
return $this->render('user/edit.html.twig', [
'form' => $form->createView(),
]);
}
现在,当我提交表单时,它可以工作,但不会关闭窗口
setTimeout仅用于测试,但不是必需的。
有什么想法吗?为什么要重新加载页面?因为您重新加载了页面,所以它不会关闭,您可以使用纯JavaScript来完成这项工作
document.getElementById('saveAndClose').onclick=()=>window.close();
但是您的情况可能类似于您不应该使用超时来关闭选项卡。 您可以在处理表单后将变量传递给视图,例如
close\u window
。在视图中,您可以执行以下操作,而不是超时:
{% if close_window|default %}
<script>window.close();</script>
{% endif %}
{%如果关闭|窗口|默认值%}
window.close();
{%endif%}
为什么在提交后重新加载?为什么不关闭该选项卡?请分享更多详细信息。这与PHP、Symfony或Twig有什么关系?他们中没有一个能处理浏览器标签我不明白我为什么-1@AngelDeykov有没有办法防止在提交后重新加载页面?@NicoHaase well OP必须在页面发送到服务器后关闭该选项卡谢谢你,你救了我一天。我想用ajax来实现它,重写我的控制器和所有东西。这条路容易多了@黑背