我正在尝试执行我的要求。当我在IE浏览器中运行页面时,我成功地获得了我的要求,并且在Chrome中也没有。
for(var gridNo=0;gridNo < 30;gridNo++){
var fldId = arry[0]+'_'+arry[1]+'_'+arry[2]+'_'+arry[3]+'_'+gridNo;
var doc = document.getElementsByName(fldId);
alert(doc);
var doc1=doc;
if(eval(doc)== null){
alert("Oops....!");
break;
}
alert("The value of the Element By Name"+doc1);
alert("The value of the Element By Id"+document.getElementById(fldId));
var selectedDropDown = getSelectedDropDownValue(document.getElementsByName(fldId));
alert("The Value is:"+selectedDropDown);
if(parseInt(selectedDropDown) == 0){
gridEmpCount = gridEmpCount + 1;
}else if(parseInt(selectedDropDown) == 1){
gridSpouseCount = gridSpouseCount + 1;
}else if(parseInt(selectedDropDown) == 2){
gridParentCount = gridParentCount + 1;
}
}
最后我才知道我必须使用document.getElementById(), 它在IE浏览器中运行良好,但它无法在Chrome中运行... PLZ帮助
答案 0 :(得分:2)
您的代码存在多处问题。很难说这些IE中哪一个处理得很奇怪,但是形成IE会以奇怪的方式处理坏代码也是如此。解决方案是摆脱坏代码,然后你会得到一致的行为。以下是代码中错误信息的列表:
document.getElementsByName()
返回一个列表。它不会返回null
。它永远不会返回单个对象。该列表可能为空,没有与该名称匹配的DOM元素。
if(eval(doc)== null){
只是错误的代码。即使doc
为null
,您的代码仍然无效。您可以使用if (!doc || !doc.length)
替换该行,您可能只使用if (!doc.length)
。
如果您只想要与名称匹配的第一个元素,并且您确定总是至少有一个,那么请执行以下操作:getSelectedDropDownValue(document.getElementsByName(fldId)[0])
您在一个地方使用document.getElementsByName(fldId)
,在另一个地方使用document.getElementById(fldId)
。你真的想要使用相同的长字符串作为名称和ID吗?通过id获取它将仅返回单个DOM对象。但是按名称提取将始终返回对象列表。
如果您打算在IE 9之前支持任何版本的IE,那么parseInt()
应始终作为第二个参数传递基数,否则它将根据字符串的内容猜测基数,有时会猜错,特别是如果字符串中有一个前导零。
您没有完全解释您要完成的任务,但这里是您的代码的清理版本:
var fldBase = arry[0] + '_' + arry[1] + '_' + arry[2] + '_' + arry[3] + '_';
for (var gridNo = 0; gridNo < 30; gridNo++) {
var fldId = fldBase + gridNo;
var doc = document.getElementsByName(fldId);
if (!doc || !doc.length) {
alert("Oops....!");
break;
}
// use doc[0] to get the first item with the name
var selectedDropDown = parseInt(getSelectedDropDownValue(doc[0]), 10);
alert("The Value is:" + selectedDropDown);
if (selectedDropDown == 0) {
gridEmpCount = gridEmpCount + 1;
} else if (selectedDropDown == 1) {
gridSpouseCount = gridSpouseCount + 1;
} else if (selectedDropDown == 2) {
gridParentCount = gridParentCount + 1;
}
}