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