【问题标题】:Losing radio values on jQuery cloned form fields在 jQuery 克隆表单字段上丢失单选值
【发布时间】:2025-12-23 09:55:17
【问题描述】:

我不擅长 PHP 表单和邮件功能,但是...

我正在尝试建立自己和 RSVP 表单 (http://adrianandemma.com/),人们可以在其中添加他们的姓名并选择是/否来参加。他们还可以单击链接以回复其他人。如果单击,这将通过 jQuery 克隆名称和无线电。

提交表单后,我尝试通过电子邮件将详细信息发送给自己。该电子邮件当前正在提交,如果我一次收到一封包含 3 个 RSPV 名称的电子邮件,则可以通过电子邮件发送 3 个名称值,但我只有第一个人是/否答案的值。

谁能帮助诊断为什么我克隆的单选按钮值没有通过电子邮件发送?

这是我的表格:

    <form action="?" method="post">
        <?php if(@$errors) :?>
            <p class="errors"><?php echo $errors; ?></p>
        <?php endif; ?>
        <input type="hidden" name="submit" value="1" />
        <div class="form-row">
            <div class="field-l">
                <p>Name</p>
            </div>
            <div class="field-r">
                <p>Attending?</p>
            </div>
        </div>
        <div class="form-row guest">
            <div class="field-l">
                <input type="text" name="name[]" id="name" value="<?php echo htmlspecialchars(@$_REQUEST['name']); ?>" tabindex="1" />
            </div>
            <div class="field-r">
                <input type="radio" name="coming[]" id="coming-yes" class="coming-yes" value="Yes"><label for="coming-yes">Yes</label><input type="radio" name="coming[]" id="coming-no" class="coming-no" value="No"><label for="coming-no">No</label>
            </div>
        </div>
        <a class="addguest" href="#">Add further guest</a>
        <div class="form-row">
            <button type="submit" id="rsvp-submit" tabindex="2">Submit RSVP</button>
        </div>
    </form>

...这是我的 php 邮件代码:

<?php

$name = $_POST['name'];
$coming = $_POST['coming'];

$errors = "";
if(!@$_POST['name'])    { $errors .= "Please enter your name.<br/>\n"; }
if(!@$_POST['coming'])  { $errors .= "Please enter yes or no for attending.<br/>\n"; }

if(@$_POST['emailaddress'] != '')   { $spam = '1'; }

if (!$errors && @$spam != '1')
    {
        $to = "xxx@example.com";
        $subject = "Wedding RSVP";
        $headers = "From: noreply@adrianandemma.com";
        $body = "The following RSVP has been sent via the website.\n\n";
        for($i=0; $i < count($_POST['name']); $i++) {
            $body .= "
            Name ".($i+1)." : " . $_POST['name'][$i] . "\n
            Coming ".($i+1)." : " . $_POST['coming'][$i] ."\n\n";
        }
        $body .= "\n\nDate Received: " . date("j F Y, g:i a") . "\n";

        mail($to,$subject,$body,$headers);
    }

?>

我的简单 $error 验证似乎也有问题。如果我提交的表单目前没有填写任何内容,它只会向我显示关于空单选按钮而不是空的“名称”字段的错误消息,不知道为什么会这样?

任何帮助都会非常棒,因为我正在努力完成这项工作。

谢谢:)

...抱歉应该包括这是我目前通过电子邮件收到的内容的一个示例,如果说我收到了 3 个姓名的回复:

The following RSVP has been sent via the website.


         Name 1 : Dave Jones

         Coming 1 : Yes


         Name 2 : Amy Jones

         Coming 2 : 


         Name 3 : Carl Jones

         Coming 3 : 


Date Received: 16 April 2017, 2:38 pm

【问题讨论】:

    标签: php jquery forms validation jquery-clone


    【解决方案1】:

    我查看了由您的 misc.js javascript 生成的 html,并且 name 属性被设置为 coming[]1,coming[]2

    我的建议是:

    1) 将这些保留为coming[],因此您的请求将coming 作为一个数组。然后,您可以使用与name 相同的索引来循环遍历它。

    2) 使用您的 jquery 将 coming[] 替换为 coming1,coming2,coming3,然后在您的 PHP 中将它们作为单独的变量处理。

    【讨论】:

    • 啊,谢谢...收音机现在刚刚命名为coming[]。但是,当我现在提交时,没有任何单选值通过(它们都是空白的)。我是否需要添加到我的 php 邮件代码来处理多个收音机?
    • 实际上,现在我已经删除了将'name'属性更改为1、2、3等的js,我一次只能选择一个收音机。我想这是因为如果我有 3 个重复的收音机,它们现在都具有相同的名称。嗯...
    【解决方案2】:

    您是否意识到,如果您“添加另一位客人”,单选按钮中没有任何值。在字段 1 中,值存在但字段 2、3、4 等为空...也许这就是它发送的原因提交表单时为空值..

    radio button empty value

    【讨论】: