【问题标题】:Form tag closing prematurely表单标签过早关闭
【发布时间】:2015-07-30 15:37:16
【问题描述】:

据我所知,这意味着 html 代码无效,通常是因为嵌套不正确。

此表单是在按下按钮时通过从 jQuery.ajax() 调用的 php 函数中回显生成的:

<?php

echo '
<div class="row survey-container text-center">
    <form id="surveyForm" action="processSurvey.php" method="post">

        <h3>Alimentos</h3>
        <h4>Sabor</h4>
        <div class="form-group">';
            for ($i = 0; $i <= 10; $i++) {  // Imprime lista de sabor
                echo '
                    <label class="radio-inline">
                        <input type="radio" name="sabor" id="saborRadio'. $i .'" value="'. $i .'">'. $i.'
                    </label>
                ';
            }
            echo '
        </div>
        <div class="form-group">
            <button class="btn btn-default surveyForm-btn" type="submit">Enviar</button>
        </div>

    </form>
</div>
';
?>

所有代码都按预期运行,但只有一行:

[...] 
        <form id="surveyForm" action="processSurvey.php" method="post"></form>
[...]

表单一打开就会自行关闭。我违反了一些规则吗?似乎找不到问题。我不认为问题出在 js 上,但我会包含它

        $('body').on('submit', '#surveyForm', function(e){
        console.log("Clicked on #surveyForm ");
        var data = $(this).serialize();
        console.log( data );
        $.ajax({
            method: "POST",
            url: "processSurvey.php", 
            data: data, 
            success: function(result){
                console.log("Ajax call to processSurvey success");
                $("#surveyForm").clearForm();
                console.log(result);
                console.log( data );

            } 
        });
        return false;
    });

控制台日志显示一切正常,但没有发送数据(空数组),考虑到表单过早关闭,这是有道理的。

编辑:我想我知道问题出在哪里,表格是在表格中创建的,这是无效的 html(对吗?)我会在修复它时发布更新。我应该标记为已回答吗?

【问题讨论】:

  • 显示生成的html。如果发生这种情况,您通常在某处损坏了 html,并且您的浏览器正在尝试补偿。
  • 取消这个功能怎么样 - $("#surveyForm").clearForm(); ?

标签: javascript php jquery ajax asynchronous


【解决方案1】:

您正在序列化按钮,而不是表单。

var data = $(this).closest("form").serialize();

【讨论】:

  • 谢谢你的回答,表格是自动关闭的,因为我把它放在一张桌子里,下次肯定要三重检查,我很傻。你对我序列化错误的事情是对的,所以你的答案解决了一个我还没有看到的不同问题,所以我会标记为已回答。
【解决方案2】:

您的数据变量,var 'this' 是您的按钮, 你在范围事件中。

您应该使用.closest('form') 使您的.serialize() 正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多