Javascript InnerHTML删除表单元素中的数据

时间:2010-03-09 19:18:25

标签: javascript html

我有一个带有一个按钮的表单,允许您向表单添加字段。

<form id="contact" name="contactForm" action="newPoll.php" method="post">
                        <fieldset>
                            <legend>Create A Poll</legend><br style="clear:both;">           

                                <ol>
                                    <li><lable for=pollTitle>Poll Title:</lable><input name="pollTitle" id="pollTitle" type="text" size="66"  /> </li>
                                    <li><lable for=question>1st Question:</lable><input name="question" id="question" type="text" size="66"  /> </li>
                                    <li><lable for=answerType>Constrained:</lable><input name="answerType" id="answerType" value="Constrained" type="radio" size="66"  /><span style="margin: 0 0 0 40px;">
                                    Unconstrained: <input style="margin-right: 30px;" name="answerType" value="Unconstrained" id="question" type="radio" size="66"  /></span>(Allow multiple answers) </li>
                                    <li><lable for=answer1>Answer:</lable><input name="answer1" id="answer1" type="text" size="66" /> </li>
                                    <li><lable for=answer2>Answer:</lable><input name="answer2" id="answer2" type="text" size="66" /> </li>
                                    <li><lable for=answer3>Answer:</lable><input name="answer3" id="answer3" type="text" size="66" /> </li>
                                    <li><lable for=answer4>Answer:</lable><input name="answer4" id="answer4" type="text" size="66" /> </li>

                            </ol><br />
                        </fieldset>
            <input type="button" value="Add More Answers" name="addAnswer" onClick="generateRow()" /><input type="submit" name="submit" value="Add Another Question">
</form>

这里是generateRow():

var count = 5;

function generateRow() {
    var d=document.getElementById("contact");
    var b = document.getElementById("answer4");
    var c =b.name.charAt(0);
    var f = b.name.substr(0, 6);
    var y = f + count;
    count = count + 1;
    d.innerHTML+='<li><lable for=' + y + '>Answer:</lable><input name="' + y + '" id="' + y    + '" type="text" size="66"/> </li>';
}

问题是每当添加新行时,它都会删除可能在任何非原始(添加)文本字段中输入的任何输入。它应该将数据保留在表单元素

4 个答案:

答案 0 :(得分:1)

当您设置innerHTML属性时,浏览器会解析HTML并为其创建新的DOM树,然后用新的DOM树替换当前的DOM树。这会破坏HTML中没有的任何数据。

您需要使用createElementappendChild或使用jQuery(更简单)附加DOM元素。

答案 1 :(得分:1)

<ol>元素提供ID:

<ol id="answers">
    ...
</ol>

然后将函数的第一行更改为:

var d=document.getElementById("answers");

完成上述更改后,它应该可以正常工作。我在Firefox,Chrome,Safari和IE8中测试过它。正如其他人所提到的,你也应该更正你的“标签”的拼写。

答案 2 :(得分:1)

HTML元素的value属性未更新以反映输入元素的当前值... see this related question

您可以使用createElementappendChild完全避免使用innerHTML属性。

而不是:

d.innerHTML+='<li><lable for=' + y + '>Answer:</lable><input name="' + y + '" id="' + y    + '" type="text" size="66"/> </li>';

您可以尝试:

var li = document.createElement('li');
li.for = y;
li.innerHTML = 'Answer:'

var input = document.createElement('input');
input.name=y;
input.id = y;
input.size=66;

d.appendChild(li);
d.appendChild(input);

答案 3 :(得分:-1)

首先,尝试将其拼写为“标签”而不是“标签”。另一方面,您正在设置 d 的“innerHTML”属性,因此您当然要消除任何现有值。