HTML代码在浏览器中发生了变化

时间:2018-03-06 07:42:59

标签: javascript html

我在javascript循环中有以下代码
    

document.getElementById("alladdress").innerHTML+="<form action=\"updateUserInfo\" method=\"POST\">";
document.getElementById("alladdress").innerHTML+="<input type=\"text\" name = \"id\" value="+id+" hidden><br>";
document.getElementById("alladdress").innerHTML+="<input type=\"text\" name = \"contact\" value="+contact+"><br>";
document.getElementById("alladdress").innerHTML+="<input type=\"text\" name = \"add\" value="+add+" ><br>";
document.getElementById("alladdress").innerHTML+="<input type=\"text\" name = \"city\" value="+city+" ><br>";
document.getElementById("alladdress").innerHTML+="<input type=\"text\" name = \"zip\" value="+zip+" ><br>";
document.getElementById("alladdress").innerHTML+="<input type=\"text\" name = \"state\" value="+state+" ><br>";
document.getElementById("alladdress").innerHTML+="<input type=\"submit\" value=\"Edit Address\"><br>";
document.getElementById("alladdress").innerHTML+="</form>";

但是当我在浏览器中检查时,结尾表单标记会附加在表单标记的末尾(请参阅下面的第一行),因为我的提交按钮无效,请帮我弄清问题是什么。

在我的浏览器元素标签中,如下所示

<form action="updateUserInfo" method="POST"></form>
<input type="text" name="id" value="1" hidden=""><br>
<input type="text" name="contact" value="ijkl"><br>
<input type="text" name="add" value="abcd"><br>
<input type="text" name="city" value="efgh"><br>
<input type="text" name="zip" value="xyza"><br>
<input type="text" name="state" value="mnop"><br>
<input type="submit" value="Edit Address"><br>

5 个答案:

答案 0 :(得分:3)

浏览器将尝试修复无效的HTML,这意味着关闭未关闭的标签。请注意您的第一行:

document.getElementById("alladdress").innerHTML+="<form action=\"updateUserInfo\" method=\"POST\">";

创建无效代码。浏览器会立即为您关闭该标记。

如果您希望它的行为正确,请构建整个HTML字符串,然后执行单个innerHTML分配:

const html = "<form action=\"updateUserInfo\" method=\"POST\">"
    + "<input type=\"text\" name = \"id\" value="+id+" hidden><br>"
    + "<input type=\"text\" name = \"contact\" value="+contact+"><br>"
    + "<input type=\"text\" name = \"add\" value="+add+" ><br>"
    + "<input type=\"text\" name = \"city\" value="+city+" ><br>"
    + "<input type=\"text\" name = \"zip\" value="+zip+" ><br>"
    + "<input type=\"text\" name = \"state\" value="+state+" ><br>"
    + "<input type=\"submit\" value=\"Edit Address\"><br>"
    + "</form>";
document.getElementById("alladdress").innerHTML += html;

答案 1 :(得分:0)

Mayby启动autosacrifice标签。尝试保存字符串变量而不是innerHtml这个值。

var block = document.getElementById("alladdress");
var str = '';
var id = 1, contact = 'default', add='true', city = 'NY', zip = 'true', state = '-';

str+="<form action=\"updateUserInfo\" method=\"POST\">";
str+="<input type=\"text\" name = \"id\" value="+id+" hidden><br>";
str+="<input type=\"text\" name = \"contact\" value="+contact+"><br>";
str+="<input type=\"text\" name = \"add\" value="+add+" ><br>";
str+="<input type=\"text\" name = \"city\" value="+city+" ><br>";
str+="<input type=\"text\" name = \"zip\" value="+zip+" ><br>";
str+="<input type=\"text\" name = \"state\" value="+state+" ><br>";
str+="<input type=\"submit\" value=\"Edit Address\"><br>";
str+="</form>";
block.innerHTML = str;
<div id="alladdress"></div>

答案 2 :(得分:0)

这是因为浏览器本身会尝试平衡标签。

或者,您可以使用template literals

创建模板

document.getElementById("alladdress").innerHTML += "<form 
action=\"updateUserInfo\" method=\"POST\">";
<div id="alladdress"></div>

var id = 'testId';
var contact = 'contact';


document.getElementById("alladdress").innerHTML = `<form action="updateUserInfo" method="POST">
 <input type="text" name ="${id}" value="+${id}+" hidden><br>
 <input type="text" name = "contact" value="+${contact}+"><br>
</form>`;
<div id="alladdress"></div>

答案 3 :(得分:0)

当单独添加每一行时,浏览器会尝试修复您的代码。我建议使用template-strings,这样你就不必为逃避字符和使用一个变量附加所有字符而烦恼。

const html = `
<form action="updateUserInfo" method="POST">
    <input type="text" name="id" value="${id}" hidden><br>
    <input type="text" name="contact" value="${contact}"><br>
    ....
</form>
document.getElementById('alladdress').innerHTML += html;
`

答案 4 :(得分:0)

您也可以将每一行放入一个数组中,然后将它们连接起来。

var id=34,contact="Tom",add="asdf",city="NY",zip="12356",state="NY";
var form = Array();
form[0]="<form action=\"updateUserInfo\" method=\"POST\">";
form[1]="<input type=\"text\" name = \"id\" value="+id+" hidden>";
form[2]="<input type=\"text\" name = \"contact\" value="+contact+">";
form[3]="<input type=\"text\" name = \"add\" value="+add+" >";
form[4]="<input type=\"text\" name = \"city\" value="+city+" >";
form[5]="<input type=\"text\" name = \"zip\" value="+zip+" >";
form[6]="<input type=\"text\" name = \"state\" value="+state+">";
form[7]="<input type=\"submit\" value=\"Edit Address\">";
form[8]="</form>";

document.getElementById("alladdress").innerHTML = form.join('<br>',form);
<div id="alladdress">

</div>