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

Laravel+Alpine.js环境下Quill编辑器与表单字段提交问题

在Laravel+Alpine.js中获取Quill富文本内容并提交表单

错误原因

出现“Can't find variable: quill”是因为Quill实例没有被正确挂载到Alpine.js的作用域中,或者全局未定义有效实例。

解决方案

方案1:将Quill实例绑定到Alpine状态(推荐)

通过Alpine的x-data定义实例变量,在x-init中初始化Quill,确保实例在Alpine作用域内可访问:

<div 
    x-data="{ 
        quill: null, 
        form: {
            title: '',
            // 按需添加其他字段
        }
    }" 
    x-init="
        // 初始化Quill并绑定到Alpine实例
        quill = new Quill('#editor-container', {
            theme: 'snow',
            modules: { toolbar: '#editor-toolbar' }
        });
    "
>
    <!-- Quill工具栏 -->
    <div id="editor-toolbar">
        <button class="ql-bold">粗体</button>
        <button class="ql-italic">斜体</button>
        <!-- 按需添加其他工具栏按钮 -->
    </div>
    <!-- Quill编辑器容器 -->
    <div id="editor-container"></div>

    <!-- 其他表单字段 -->
    <input type="text" placeholder="标题" x-model="form.title">

    <!-- 提交按钮 -->
    <button @click="handleSubmit">提交</button>
</div>

<script>
    document.addEventListener('alpine:init', () => {
        Alpine.data('formComponent', () => ({
            handleSubmit() {
                // 收集Quill的HTML内容
                this.form.content = this.quill.root.innerHTML;
                // 若后端需要Delta格式,改用 this.quill.getContents()

                // 提交到Laravel后端
                fetch('/api/submit-form', {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json',
                        'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content
                    },
                    body: JSON.stringify(this.form)
                })
                .then(res => res.json())
                .then(data => {
                    console.log('提交成功', data);
                    // 按需处理成功逻辑,比如重置表单
                })
                .catch(err => console.error('提交失败', err));
            }
        }));
    });
</script>

方案2:用隐藏表单字段同步Quill内容

如果偏好传统表单提交方式,可添加一个隐藏的<textarea>,实时同步Quill内容,提交时自动携带:

<form method="POST" action="/submit-form">
    @csrf
    <!-- Quill编辑器 -->
    <div id="editor"></div>
    <!-- 隐藏字段同步内容 -->
    <textarea name="content" id="hidden-content" style="display: none;"></textarea>

    <!-- 其他表单字段 -->
    <input type="text" name="title" placeholder="标题">

    <button type="submit">提交</button>
</form>

<script>
    // 初始化Quill
    const quill = new Quill('#editor', { theme: 'snow' });
    // 实时同步到隐藏字段
    quill.on('text-change', () => {
        document.getElementById('hidden-content').value = quill.root.innerHTML;
    });
</script>

Laravel后端可直接通过$request->input('content')获取编辑器内容,无需额外处理。

关键注意事项

  • 确保Quill脚本在初始化代码之前加载(比如放在<head>或页面底部)。
  • Alpine.js的作用域必须覆盖Quill容器,避免实例无法访问。
  • 提交时必须携带Laravel的CSRF令牌,可通过@csrf指令或meta标签获取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 09:30:40