serialize()值在第二次调用时出错


serialize() value wrong on second call

我正在调用一个页面,该页面在ajax调用中有一个表单提交。当函数被第二次调用时,它在ajax调用数据中有原始数据。

我在这里只简化了序列化部分:

test_form.php

    function form($a, $b) {
    ?>
    <form name="myform" id="myform">
        <input type="text" id="a" name="a" value="<?php echo $a; ?>" />
        <input type="text" id="b" name="b" value="<?php echo $b; ?>" />
    </form>
    <script>
        console.log($("#myform").serialize());
    </script>
    <?php
}

然后从一个单独的文件调用:

<head>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
    <link rel="stylesheet" type="text/css" href="//code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css">
    <link rel="stylesheet" type="text/css" href="/P3Live/_includes/css/gametypes.css">
    <link rel="stylesheet" type="text/css" href="/P3Live/_includes/css/tables.css">
    <script src="http://code.jquery.com/jquery-1.11.1.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.3/jquery-ui.min.js"></script> 
    <script src="/P3Live/_includes/js/general_functions.js"></script> 
</head>
<?php
error_reporting(E_ERROR);
include_once("test_form.php");
form("firstA", "firstB");
echo "step # 1 should be started <br />";

form("secondA", "secondB");
echo "step # 2 should be started <br />";
?>

当第二个文件被激发时,结果是:

HTML页面:firstA(输入框1)firstB(输入框2)步骤#1应该启动

secondA(输入框1)secondB(输入框2)步骤#2应该启动

控制台:a=第一a&b=第一个ba-firstA&b=第一个b

您会注意到输入字段是正确的,但底部的序列化数据不是。它为两个结果显示第一次调用时的相同序列化数据。我试着发布一张截图,但没有这样做的信誉点。

如有任何帮助,我们将不胜感激。

您正在创建具有相同ID的两个表单,由于ID是唯一的,因此您将从第一个表单获取数据,因为当存在重复ID时,jQuery会选择重复ID,即具有该ID的第一个元素。

尝试使用唯一ID的创建表单

function form($a, $b, $id) {
    ?>
    <form name="myform" id="<?php echo $id; ?>">
        <input type="text" id="a" name="a" value="<?php echo $a; ?>" />
        <input type="text" id="b" name="b" value="<?php echo $b; ?>" />
    </form>
    <script>
        console.log($("#<?php echo $id; ?>").serialize());
    </script>
    <?php
}

然后做

form("firstA", "firstB", "myForm1");
form("secondA", "secondB", "myForm2");

等等。

这是因为两个表单的ID相同。你必须为第二个表单分配一个新的ID。它应该是这样的:
<?php
function form($a, $b) {
    static $i = 0;
    ?>
    <form name="myform<?php echo $i; ?>" id="myform<?php echo $i; ?>">
        <input type="text" id="a" name="a" value="<?php echo $a; ?>" />
        <input type="text" id="b" name="b" value="<?php echo $b; ?>" />
    </form>
    <script>
        console.log($("#myform<?php echo $i; ?>").serialize());
    </script>
    <?php
    $i++;
}