Javascript中带有eventHandler的循环错误

Javascript中带有eventHandler的循环错误,javascript,Javascript,我在和HTML页面中有以下Javascript代码。它的功能是基于用户按下+按钮在表单上显示元素,如果不需要该元素,则通过用户按下-按钮将其删除。当前,在以下事件序列之后,其引发的错误“TypeError:docs[n]”未定义: 选择按钮以添加元素 删除不需要的元素 添加回元素(抛出错误) 任何帮助都将不胜感激 `<script language="JavaScript">` var idx = 0; var d; /

我在和HTML页面中有以下Javascript代码。它的功能是基于用户按下+按钮在表单上显示元素,如果不需要该元素,则通过用户按下-按钮将其删除。当前,在以下事件序列之后,其引发的错误“TypeError:docs[n]”未定义:

  • 选择按钮以添加元素
  • 删除不需要的元素
  • 添加回元素(抛出错误)
  • 任何帮助都将不胜感激

    `<script language="JavaScript">`
    
           var idx = 0;
    
    
    
            var d;
    
                //Make getElementsByClassName work for all of IE revs
                if (!document.getElementsByClassName) {
                    document.getElementsByClassName = function (cn) { 
                    var rx = new RegExp("(?:^|\\s)" + cn+ "(?:$|\\s)");
                    var allT = document.getElementsByTagName("*"), allCN = [],ac="", i = 0, a;
                    while (a = allT[i=i+1]) {
                      ac=a.className;
                      if ( ac && ac.indexOf(cn) !==-1) {
                        if(ac===cn){ allCN[allCN.length] = a; continue;   }
                        rx.test(ac) ? (allCN[allCN.length] = a) : 0;
                      }
                    }
                return allCN;
            }
        }
                function add_fields(e) {
    
                // for some reason, adding the new fields wipes out existing values, so save and restore
                var docs = document.getElementsByClassName("doc");
                var revs = document.getElementsByClassName("rev");
    
                 ++idx;
    
                /*  console.log("test " + idx); */
    
                var saveDocs = new Array(idx); 
                var saveRevs = new Array(idx);
    
                for (n=0; n < idx; n++) {
                saveDocs[n] = docs[n].value;   **//Error is thrown here**
                saveRevs[n] = revs[n].value;
                }
    
    
                node = document.getElementById("content");
                theNewRow = document.createElement("tr");
    
                    theNewCell = theNewRow.insertCell(0);
                    theNewCell.innerHTML = "Approver Name";
                    theNewCell.setAttribute("style","font-size: 12pt");
    
                    theNewCell1 = theNewRow.insertCell(1);
                    theNewCell1.innerHTML = "<input type='text' class='doc' style='width:180px;' id='docNum0'/>";
                    theNewCell1.setAttribute("style","padding-left: 10px");
    
                    theNewCell2 = theNewRow.insertCell(2);
                    theNewCell2.innerHTML = "Approver Email";
                    theNewCell2.setAttribute("style","font-size: 12pt");
                    theNewCell2.setAttribute("style","padding-left: 10px");
    
                    theNewCell3 = theNewRow.insertCell(3);
                    theNewCell3.innerHTML = "<input type='text' class='rev' style='width:180px;' id='rev0'/>  <input class='minusThing' type='button' style='font-size:10px' value='- '/>";
                    theNewCell3.setAttribute("style","padding-left: 0px"); 
    
    
    
                    node.appendChild( theNewRow );
    
    
    
                // restore old arrays and add the id tags to the fields just added
                docs = document.getElementsByClassName("doc");
                revs = document.getElementsByClassName("rev");
                for (n=0; n < idx; n++) {
                docs[n].value = saveDocs[n];
                revs[n].value = saveRevs[n];
                } 
    
    
                docs[idx].id = "docNum" + idx;
                revs[idx].id = "rev" + idx; 
                    }
    
    
                //for Loop the entries
                function myfunction() { 
    
                    alert('Inside Function')
    
                   var values = ""; 
                   for (n=0; n <= idx; n++)
                   {               
                    var doc = document.getElementById("docNum"+n).value;
                    var rev = document.getElementById("rev"+n).value;
    
    
                    //alert(doc+rev);
    
    
                     //Call VbScript Sub and pass value
                        PassValues(doc,rev);
         ```
    
    ``
    var-idx=0;
    变量d;
    //使getElementsByClassName适用于所有IE版本
    如果(!document.getElementsByClassName){
    document.getElementsByClassName=函数(cn){
    var rx=new RegExp(“(?:^ |\\s)”+cn+”(?:$|\\s)”;
    var allT=document.getElementsByTagName(“*”),allCN=[],ac=“”,i=0,a;
    而(a=allT[i=i+1]){
    ac=a.className;
    if(ac&&ac.indexOf(cn)!=-1){
    如果(ac==cn){allCN[allCN.length]=a;continue;}
    接收测试(ac)?(所有CN[所有CN.长度]=a):0;
    }
    }
    返回allCN;
    }
    }
    函数添加_字段(e){
    //由于某些原因,添加新字段会清除现有值,因此请保存并恢复
    var docs=document.getElementsByClassName(“doc”);
    var revs=document.getElementsByClassName(“rev”);
    ++idx;
    /*控制台日志(“测试”+idx)*/
    var saveDocs=新数组(idx);
    var saveRevs=新阵列(idx);
    对于(n=0;n对于(n=0;n如果已删除所有文档,
    document.getElementsByClassName(“doc”);
    将返回一个空数组。如果在循环之前递增
    idx
    ,循环将执行一次,并尝试访问未定义的
    文档[0]

    这有帮助吗,或者您仍然有问题?