提交表单并发现错误时,页面刷新仍然在顶部,但我的表单在底部

Upon form submit and errors are found the page refresh remains at the top but my form is at the bottom

我正在创建一个简单的传呼机,其好处在顶部和中间,注册在底部。

我目前正在测试表单验证。当我输入无效信息以测试正确处理控制器的错误时 returns 列出错误的同一页面,但是该页面返回到最顶部,用户将看不到任何错误消息。他们可能实际上认为一切都很顺利。

我可以选择将表单移动到新页面,但我想先看看是否可以将焦点返回到表单当前所在的页面底部。

我不想在这里用 javascript 和变通办法来做大事。如果不需要太多努力就可以实现,我会尝试,但如果将注册表单移动到另一个页面更容易,我会去做。

代码?我不确定什么代码在这里是相关的。控制器是否控制页面滚动?

控制器:

public function indexAction(Request $request)
{
    $em = $this->getDoctrine()->getManager();

    $signUp = new SignUp();
    $form = $this->createForm(new SignUpType(), $signUp);

    $form->handleRequest($request);

    if ($form->isValid()) {
        $em->persist($signUp);
        $em->flush();

        return $this->redirect($this->generateUrl('japps_lfm_default_thanks'));
    }

    return $this->render('JAppsLFMBundle:AB:a.html.twig', array('form' => $form->createView(),));
}

一个简单的解决方案是使用锚。

示例:

您的表单可以使用 id 属性,您的表单操作可以在 url:

中使用此 id
<form id="my-form" action="{{ path('my_route') }}#my-form" ...>
...
</form>

现在,如果您提交表单时出现错误,浏览器应跳转到该表单。

旁注:滚动是客户端的事情,因此 PHP 无法帮助您。只有 JavaScript 或这个简单的基于哈希的解决方案。