自知其無知
          不懂,慢慢懂。
          posts - 2,comments - 2,trackbacks - 0

          轉自: http://www.javaeye.com/problems/2639

          1. <html>   
          2. <head>   
          3. <title>動態添加html元素</title>   
          4. <script type="text/javascript">   
          5. <!--   
          6. var textNumber = 1;   
          7. function addCheckDetail(form,afterElement){   
          8.     textNumber++;   
          9.     //創建列表標簽   
          10.     var label2=document.createElement("label");   
          11.     label2.appendChild(document.createTextNode("問題所屬方面:"));   
          12.     var select=document.createElement("select");    
          13.     select.setAttribute("select","select"+textNumber);   
          14.     select.setAttribute("size","1");   
          15.     select.setAttribute("id","select"+textNumber);   
          16.     var option1=document.createElement("option");   
          17.     option1.setAttribute("value","1");   
          18.     option1.appendChild(document.createTextNode("方面一"));   
          19.     var option2=document.createElement("option");   
          20.     option2.setAttribute("value","2");   
          21.     option2.appendChild(document.createTextNode("方面二"));       
          22.     label2.appendChild(select);   
          23.     select.appendChild(option1);   
          24.     select.appendChild(option2);   
          25.     form.insertBefore(label2,afterElement);   
          26.        
          27.     // 創建文本標簽   
          28.     var label1 = document.createElement("label");   
          29.     // 創建文本框   
          30.     var textField = document.createElement("textarea");   
          31.     textField.setAttribute("name","txt"+textNumber);   
          32.     textField.setAttribute("cols",80);   
          33.     textField.setAttribute("rows",3);   
          34.     textField.setAttribute("id","txt"+textNumber);   
          35.     // 增加標簽文本注釋   
          36.     label1.appendChild(document.createTextNode("問題描述"+textNumber+":"));   
          37.     // 把textField放入標簽中   
          38.     label1.appendChild(textField);   
          39.     // 把所有的這些增加到form中   
          40.     form.insertBefore(label1,afterElement);   
          41. }   
          42. function removeCheckDetail(form,afterElement){   
          43.     // 假如有文本框個數超過一個   
          44.     if (textNumber > 1) {    
          45.         // 刪除最后一個添加的文本框   
          46.         form.removeChild(document.getElementById("select"+textNumber).parentNode);   
          47.         form.removeChild(document.getElementById("txt"+textNumber).parentNode);   
          48.         textNumber--;   
          49.     }   
          50. }   
          51. //-->   
          52. </script>   
          53. <style type="text/css">   
          54. <!--   
          55. label {   
          56.   display:block;   
          57.   margin:.25em 0em;   
          58. }   
          59. -->   
          60. </style>   
          61. </head>   
          62. <body>   
          63. <form id="myForm" method="get" action="./" />  
          1. <table><tbody>   
          2.         <label>問題所屬方面:   
          3.         <select name="select" size="1" id="">   
          4.           <option value="1">問題一</option>   
          5.           <option value="2">問題二</option>   
          6.         </select>   
          7.         </label>   
          8.         <label>問題描述1:<textarea name="txt1" cols="80" rows="3"></textarea></label>   
          9.            
          10.         <p>   
          11.           <input type="button" value="添加一個問題" onclick="addCheckDetail(this.form,this.parentNode)" />   
          12.           <input type="button" value="刪除最后一個問題" onclick="removeCheckDetail(this.form)" />   
          13.         </p>   
          14.         <p><input type="Submit" value="保存" /></p>  
          1. </tbody></table>   
          2.   
          3. </form>   
          4. </body>   
          5. </html>  

           我想用javascript動態增加行,當form中沒有table標簽時是可以增加的,像上面增加了table標簽就出現錯誤了,請問各位該如何解決?

              
          =======================================
          解決方案:
          由于form.insertBefore是將指定節點添加到form的直接子節點上,由于form中只有一個table,沒有afterElement這個直接子節點.所以會報錯.
          input標簽的parentNode即p標簽,它的直接父結點是TBODY標簽.所以只能用TBodyElement.insertBefore.進行插入.

          Js代碼 復制代碼
          1. form.insertBefore(label2,afterElement);   
          2. form.insertBefore(label1,afterElement);  

          兩句改為:
          1. afterElement.parentNode.insertBefore(label2,afterElement);   
          2. afterElement.parentNode.insertBefore(label1,afterElement);  

          posted on 2008-12-15 23:23 CopyHoo 閱讀(810) 評論(0)  編輯  收藏 所屬分類: Java Web
          主站蜘蛛池模板: 灵山县| 久治县| 汤阴县| 崇信县| 伊宁市| 诸暨市| 梅河口市| 台北县| 施秉县| 云浮市| 宾阳县| 英德市| 库车县| 齐河县| 翁源县| 大邑县| 习水县| 平利县| 望谟县| 肥城市| 青冈县| 侯马市| 阿瓦提县| 甘肃省| 项城市| 汪清县| 林周县| 宁安市| 昆明市| 涞源县| 和政县| 漳平市| 靖州| 永安市| 松潘县| 榆树市| 万源市| 格尔木市| 新巴尔虎左旗| 读书| 曲阳县|