如何使用ajax将文本输入字段附加到表单而不丢失表单上的用户输入?

时间:2013-10-28 19:26:14

标签: javascript php html ajax

我一直在寻找互联网和StackOverflow寻求解决方案,但我还没想出来。我有一个表格开头:

<div class="container_12">
<div id="masthead" class="grid_12">
<br/><h1>Form Builder</h1>      
</div>
<div id="main-content" class="grid_8" style="margin-top:-5px">
    <form action="" id="form" name="form">
        <div id="formbuilder" name="formbuilder">
        <label>Question:</label><input type="text" name="question1" id="question1"/><br/>
        </div>

        <button type="button" onClick="loadXMLDoc()">Add New Question</button>
        <input type="submit" name="submit" id="submit"/>
    </form>
</div>
<div id="sidebar" class="grid_4">
</div>

当按下“添加新问题”按钮时,它执行了这个javascript:

    var count = 1; //only executed once on the initial load.
function loadXMLDoc() //executed every time the button is pressed.
{
    count++;
    var xmlhttp;
    if(window.XMLHttpRequest)
    {//code for anything better than IE6
    xmlhttp=new XMLHttpRequest();
    }
    else
    {//IE6 or lower
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function()
    {
        if(xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            document.getElementById("formbuilder").innerHTML += xmlhttp.responseText;
        }
    }
    xmlhttp.open("GET", "question.php?c=" + count, true);
    xmlhttp.send();
}

javascript又从question.php获取一个新的输入字段,这是一个非常简单的php脚本:

   <?
    echo '<label>Question:</label><input type="text" name="question'.$_GET['c'].'" id="question'.$_GET['c'].'"/><br/>';
   ?>

现在,乍看之下一切正常。当我按下按钮时,会生成一个新的问题字段并将其附加到表单中。但是,如果在按下按钮之前我在任何问题文本框中都有任何值,那么所有数据都会消失,即使直观,也不应该是这种情况。为了增加乐趣,这只发生在Chrome和Firefox中。出于某种原因,Internet Explorer 9按预期工作。

显然,我做错了什么,但我无法弄清楚它可能是什么。我在很长一段时间内都没有使用过AJAX,并且非常感谢这方面的任何帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

您可以至少在Chrome和Firefox中使用insertAdjacentHTML,而不是使用innerHTML。

document.getElementById("formbuilder").insertAdjacentHTML("beforeend", xmlhttp.responseText)

从此MDN page了解详情。