让我们澄清一下我的问题,
我想创建一个元素,其中元素包含5个字段,所以我不希望用户应该能够放入一个新元素,如果旧元素为null,所以我在循环遍历旧元素时发出警告并看到如果有一些字符串,如果没有,那么不要添加新元素并发出警报请填写所有字段
这里又是我的代码
function addEvent() {
var ni = document.getElementById('discount'); // Takes the a div named discount
var discountForm = document.getElementById('discountForm'); // Takes the a form named discountForm
var numi = document.getElementById('theValue'); // Takes the a hidden input field named theValue
var num = (document.getElementById("theValue").value -1)+ 2; // Start counting to set the new divs form numbers
numi.value = num;
var divIdName = "my"+num+"Div"; // the new divs will be named
var allDivTags = discountForm.getElementsByTagName('div'); // take all div tags
var numOfDivs = (allDivTags.length -1); // take the number of the old div
var oldDivIdName = document.getElementById(allDivTags[numOfDivs].id); // old div id
var newdiv = document.createElement('div'); //the new div
newdiv.setAttribute("id",divIdName);
newdiv.innerHTML = "Company <select name=\"company[]\"><option value=\"\"></option><option value=\"ZI\">Avis</option><option value=\"ET\">Enterprise</option><option value=\"ZE\">Hertz</option><option value=\"ZD\">Budget</option><option value=\"ZR\">National</option><option value=\"AL\">Alamo</option></select> Discount Type <select name=\"type[]\"><option value=\"CD\">Discount Number</option><option value=\"PC\">Coupon Number</option></select> Code <input name=\"code[]\" type=\"text\"> Title <input name=\"title[]\" type=\"text\"> <a href=\"javascript:;\" onclick=\"removeElement(\'"+divIdName+"\')\">Remove</a>"; // creating the fileds in the new div
ni.appendChild(newdiv);
for(i=0; i<discountForm.elements.length;i++){ // loop through the divs
if(numOfDivs != i-1){ // if tho old div exist and if the old div fields are empty
if(oldDivIdName.children[i].value.length == 0){
removeElement(divIdName); // then dont put the new one
alert('Please enter all fields');
}
}
}
}
但我的问题是在IE中出现错误children[...].value.length is null or not an object
所以我试图找出如何修复它,
我希望你现在能更清楚地了解它。
答案 0 :(得分:2)
很难从你给我们的信息中辨别出来。但我的第一个猜测如下:
for(i=0; i<discountForm.elements.length;i++){
if(numOfDivs != i-1){
if(oldDivIdName.children[i].value.length == 0){
removeElement(divIdName);
alert('Please enter all fields');
}
}
}
你正在做的事情:
oldDivIdName.children[i]
但是我被定义为我可以看到的表单中元素的数量...而不是oldDivIdName的子元素数。如果表单中的元素多于oldDivIdName中的元素,则oldDivIdName.children [i]的值将为null。并且“value”未定义为null。
答案 1 :(得分:0)
很难从你给我们的信息中辨别出来。但我的第一个猜测如下:
当您第一次调用此方法时,allDivTags.length无论是null还是Negative,都会产生结果 没有元素:
var oldDivIdName = document.getElementById(allDivTags[numOfDivs].id);