轉自: http://www.javaeye.com/problems/2639
- <html>
- <head>
- <title>動態添加html元素</title>
- <script type="text/javascript">
- <!--
- var textNumber = 1;
- function addCheckDetail(form,afterElement){
- textNumber++;
- //創建列表標簽
- var label2=document.createElement("label");
- label2.appendChild(document.createTextNode("問題所屬方面:"));
- var select=document.createElement("select");
- select.setAttribute("select","select"+textNumber);
- select.setAttribute("size","1");
- select.setAttribute("id","select"+textNumber);
- var option1=document.createElement("option");
- option1.setAttribute("value","1");
- option1.appendChild(document.createTextNode("方面一"));
- var option2=document.createElement("option");
- option2.setAttribute("value","2");
- option2.appendChild(document.createTextNode("方面二"));
- label2.appendChild(select);
- select.appendChild(option1);
- select.appendChild(option2);
- form.insertBefore(label2,afterElement);
- // 創建文本標簽
- var label1 = document.createElement("label");
- // 創建文本框
- var textField = document.createElement("textarea");
- textField.setAttribute("name","txt"+textNumber);
- textField.setAttribute("cols",80);
- textField.setAttribute("rows",3);
- textField.setAttribute("id","txt"+textNumber);
- // 增加標簽文本注釋
- label1.appendChild(document.createTextNode("問題描述"+textNumber+":"));
- // 把textField放入標簽中
- label1.appendChild(textField);
- // 把所有的這些增加到form中
- form.insertBefore(label1,afterElement);
- }
- function removeCheckDetail(form,afterElement){
- // 假如有文本框個數超過一個
- if (textNumber > 1) {
- // 刪除最后一個添加的文本框
- form.removeChild(document.getElementById("select"+textNumber).parentNode);
- form.removeChild(document.getElementById("txt"+textNumber).parentNode);
- textNumber--;
- }
- }
- //-->
- </script>
- <style type="text/css">
- <!--
- label {
- display:block;
- margin:.25em 0em;
- }
- -->
- </style>
- </head>
- <body>
- <form id="myForm" method="get" action="./" />
- <table><tbody>
- <label>問題所屬方面:
- <select name="select" size="1" id="">
- <option value="1">問題一</option>
- <option value="2">問題二</option>
- </select>
- </label>
- <label>問題描述1:<textarea name="txt1" cols="80" rows="3"></textarea></label>
- <p>
- <input type="button" value="添加一個問題" onclick="addCheckDetail(this.form,this.parentNode)" />
- <input type="button" value="刪除最后一個問題" onclick="removeCheckDetail(this.form)" />
- </p>
- <p><input type="Submit" value="保存" /></p>
- </tbody></table>
- </form>
- </body>
- </html>
我想用javascript動態增加行,當form中沒有table標簽時是可以增加的,像上面增加了table標簽就出現錯誤了,請問各位該如何解決?
=======================================
解決方案:
由于form.insertBefore是將指定節點添加到form的直接子節點上,由于form中只有一個table,沒有afterElement這個直接子節點.所以會報錯.
input標簽的parentNode即p標簽,它的直接父結點是TBODY標簽.所以只能用TBodyElement.insertBefore.進行插入.
把
- form.insertBefore(label2,afterElement);
- form.insertBefore(label1,afterElement);
兩句改為:
- afterElement.parentNode.insertBefore(label2,afterElement);
- afterElement.parentNode.insertBefore(label1,afterElement);