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

更新输入值后无法触发Formspree表单提交动作的问题求助

解决Formspree双表单提交问题

问题说明

我想用仅支持两个输入字段的Formspree邮件服务,因此采用双表单方案:第一个表单收集姓名、邮箱、电话、消息等多字段,提交时将这些内容整合后更新第二个Formspree目标表单的email和message字段,再触发其提交,但当前代码无法完成该任务,希望实现带更新后值的第二个表单提交动作。

原HTML代码:

<main>
        <div class="container">
            <p class="specialtext">Contact ME!</p>
            <form  class="contactform" id="firstForm">
                <input type="text" id="name" placeholder="Your Name" required>
                <input type="email" id="email" name="email" placeholder="E-Mail" required>
                <input type="text" id="phoneno" name="phone" placeholder="Phone No.">
                <textarea name="message" id="message"  placeholder="Message" cols="30" rows="10" required></textarea>
                <button type="submit">SUBMIT</button>
            </form>

            <form action="https://formspree.io/f/xoqzgybd" method="post" id="secondForm">
                <!-- <input type="email" name="name" > -->
                <input type="email" name="email">
                <textarea name="message" id="" cols="1" rows="1"></textarea>
            </form>

        </div>
    </main>

原JavaScript代码:

let firstForm = document.getElementById('firstForm');
let secondForm = document.getElementById('secondForm');
let emailInput = document.querySelector('#secondForm input[name="email"]');
let messageInput = document.querySelector('#secondForm textarea[name="message"]');

firstForm.addEventListener('submit', function(e){
    e.preventDefault();
    
    let emailtext=document.querySelector( '#email' ).value;
    let messagetext = document.getElementById('name').value + "/n" +
        document.getElementById('phoneno').value + "/n" +
        document.getElementById('message').value;

    emailInput.value = emailtext;
    messageInput.value = messagetext;

    secondForm.submit();
});

错误原因及修正方案

原代码核心问题是换行符使用错误:将JavaScript中正确的换行符\n写成了/n,导致整合后的消息内容格式混乱,同时可能影响Formspree的字段识别。另外可优化第二个表单的显示逻辑,避免干扰用户操作。

修正后的完整代码

HTML(添加隐藏样式)

<main>
    <div class="container">
        <p class="specialtext">Contact ME!</p>
        <form class="contactform" id="firstForm">
            <input type="text" id="name" placeholder="Your Name" required>
            <input type="email" id="email" name="email" placeholder="E-Mail" required>
            <input type="text" id="phoneno" name="phone" placeholder="Phone No.">
            <textarea name="message" id="message" placeholder="Message" cols="30" rows="10" required></textarea>
            <button type="submit">SUBMIT</button>
        </form>

        <!-- 隐藏第二个表单,避免干扰用户操作 -->
        <form action="https://formspree.io/f/xoqzgybd" method="post" id="secondForm" style="display: none;">
            <input type="email" name="email">
            <textarea name="message"></textarea>
        </form>
    </div>
</main>

JavaScript(修正换行符,优化字段处理)

const firstForm = document.getElementById('firstForm');
const secondForm = document.getElementById('secondForm');
const emailInput = secondForm.querySelector('input[name="email"]');
const messageInput = secondForm.querySelector('textarea[name="message"]');

firstForm.addEventListener('submit', function(e) {
    e.preventDefault();
    
    // 获取并清理表单字段值
    const userName = document.getElementById('name').value.trim();
    const userEmail = document.getElementById('email').value.trim();
    const userPhone = document.getElementById('phoneno').value.trim();
    const userMessage = document.getElementById('message').value.trim();

    // 整合多字段内容,使用正确换行符\n
    const combinedMessage = `姓名: ${userName}\n电话: ${userPhone || '未填写'}\n留言: ${userMessage}`;

    // 为第二个表单赋值
    emailInput.value = userEmail;
    messageInput.value = combinedMessage;

    // 提交Formspree表单
    secondForm.submit();
});

关键修改点

  • 替换错误的/n为正确的换行符\n,确保邮件内容格式清晰
  • 给第二个表单添加display: none样式,隐藏表单避免用户误操作
  • 添加trim()清理字段首尾空格,提升内容整洁度
  • 为整合后的消息添加字段标签,让收到的邮件内容更易读

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 01:12:27