失败消息未显示在首页上 - SvelteKit

Fail message not showing on frontpage - SvelteKit

提问人:Stef-Verniers 提问时间:11/17/2023 最后编辑:Stef-Verniers 更新时间:11/17/2023 访问量:36

问:

我是 SvelteKit 的新手。

我一直在寻找一个关于表单验证的 YouTube 教程,我遇到了这个教程。https://www.youtube.com/watch?v=BTI5oZM3buo

一切都很顺利,但是当我想向前端传递一条错误消息说密码不匹配时,我在控制台中收到了错误,但该消息没有显示给用户看。

代码有点基础且易于理解,所以即使是我,Svelte 的新手,也看不出代码有什么问题。

谁能帮我?提前致谢!

我的表格:

<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'
            });
        }
    }
}
Svelte sveltekit

评论

0赞 brunnerh 11/17/2023
是否正确声明为道具?即 ?formexport let form
0赞 brunnerh 11/17/2023
如果这是当前路由,还会建议增强操作并从操作中删除。/register
0赞 Stef-Verniers 11/17/2023
@H.B.我已经在我的代码中导入了我的道具!看一看。
0赞 Stef-Verniers 11/17/2023
@H.B.你能告诉我你的意思吗?
0赞 brunnerh 11/17/2023
在表单上翻译为:,有关更多详细信息,请参阅上一条评论中的文档链接。如前所述,只有当这是路线时,像这样更改操作才有意义。action="?/create" use:enhance/register

答:

0赞 Stef-Verniers 11/17/2023 #1

我找到了解决方案!

我完全忘记了在元素上添加 display:none,所以即使会出现错误,它也会被阻止显示。

评论

0赞 easleyfixed 11/17/2023
您可能知道,但您可以将其切换为 display:block,以便在需要消息时显示它。
0赞 Stef-Verniers 11/17/2023
这甚至有必要吗..?它在没有显示的情况下工作正常:块也
0赞 easleyfixed 11/17/2023
不完全是,但是当它设置为 display:none 时,它不会显示任何内容,或者 display:block 会显示某些内容。因此,当它有一条消息要显示时,它需要显示以阻止,但它可能你已经在这样做了,只是让你意识到这个过程,就像它在 javascript 中的任何地方一样用于类似的事情。