You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SvelteKit前端表单验证失败提示未显示问题求助

SvelteKit表单验证错误提示不显示问题排查

问题描述

我是SvelteKit新手,参考教程实现表单验证。当密码与确认密码不匹配时,控制台能捕获错误信息,但前端页面未显示该失败提示。以下是相关代码:

表单代码

<script>
    import { useForm, validators, HintGroup, Hint, email, required} from "svelte-use-form";
    // @ts-ignore
    import Logo from "/src/components/Logo.svelte";
    export let form;
</script>

<form method="POST" action="/register?/create">
    {#if form?.error}
        <div class="error">
            <p>{form.error}</p>
        </div>
    {/if}

    <label for="email">Full name</label>
        <input type="text" name="name" required />

    <label for="email">Email</label>
        <input type="email" name="email" required />

    <label for="password">Wachtwoord</label>
        <input type="password" name="password" required />

    <label for="password">Bevestig wachtwoord</label>
        <input type="password" name="requirePassword" required />
  
    <button>Login</button>

    <p>Nog geen account?<a href="google.com">Registreer hier</a></p>
</form>

+page.server.js代码

// @ts-nocheck
import { fail } from '@sveltejs/kit';

export const actions = {
    create: async({ request }) => {
        const data = await request.formData();
        const username = data.get('name')
        const email = data.get('email')
        const password = data.get('password')
        const confirmed = data.get('requirePassword')
        console.log({username, email, password, confirmed})

        if (password !== confirmed) {
            return fail(422, {
                error: 'Wachtwoorden komen niet met elkaar overeen'
            });
        }
    }
}

问题排查与解决

核心问题:表单action路径错误

控制台能捕获错误说明后端逻辑正常,前端未显示错误是因为表单action的绝对路径写法导致form变量无法正确接收后端返回的错误数据。

SvelteKit中,当前页面的action应使用相对路径写法?/create,而非绝对路径/register?/create。修改表单标签:

<form method="POST" action="?/create">

可选优化:保留用户输入内容

为提升用户体验,建议在返回fail时携带用户已输入的字段,这样提交错误后表单不会清空:

return fail(422, {
    error: 'Wachtwoorden komen niet met elkaar overeen',
    name: username,
    email: email,
    password: password,
    requirePassword: confirmed
});

同时给输入框绑定值:

<input type="text" name="name" required value={form?.name ?? ''} />
<input type="email" name="email" required value={form?.email ?? ''} />
<input type="password" name="password" required value={form?.password ?? ''} />
<input type="password" name="requirePassword" required value={form?.requirePassword ?? ''} />

额外检查:CSS样式

确认.error类有可见的样式(比如设置文字颜色为红色、不隐藏元素),避免错误信息存在但无法被看到。

内容的提问来源于stack exchange,提问作者Stef Verniers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 01:53:13