Document.getElementsByName()在IE中返回对象,但在chrome中返回对象节点列表

时间:2014-03-17 07:13:26

标签: javascript

我正在尝试执行我的要求。当我在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帮助

1 个答案:

答案 0 :(得分:2)

您的代码存在多处问题。很难说这些IE中哪一个处理得很奇怪,但是形成IE会以奇怪的方式处理坏代码也是如此。解决方案是摆脱坏代码,然后你会得到一致的行为。以下是代码中错误信息的列表:

  1. document.getElementsByName()返回一个列表。它不会返回null。它永远不会返回单个对象。该列表可能为空,没有与该名称匹配的DOM元素。

  2. if(eval(doc)== null){只是错误的代码。即使docnull,您的代码仍然无效。您可以使用if (!doc || !doc.length)替换该行,您可能只使用if (!doc.length)

  3. 如果您只想要与名称匹配的第一个元素,并且您确定总是至少有一个,那么请执行以下操作:getSelectedDropDownValue(document.getElementsByName(fldId)[0])

  4. 您在一个地方使用document.getElementsByName(fldId),在另一个地方使用document.getElementById(fldId)。你真的想要使用相同的长字符串作为名称和ID吗?通过id获取它将仅返回单个DOM对象。但是按名称提取将始终返回对象列表。

  5. 如果您打算在IE 9之前支持任何版本的IE,那么parseInt()应始终作为第二个参数传递基数,否则它将根据字符串的内容猜测基数,有时会猜错,特别是如果字符串中有一个前导零。

  6. 您没有完全解释您要完成的任务,但这里是您的代码的清理版本:

    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;
        }
    }