我遇到一个古怪的问题,页面中有许多input标签,但是element=getElementByTagName('input')却取不到值,我alert(element.length)显示[object]
1.这个[object]是什么意思?代表空吗。2.如果的确是没有取到值,那么页面中,什么情况下会取不到input?
这个问题困扰了我2天了..如果再解决不了,就要挨骂了~

解决方案 »

  1.   

    少了个s
    getElementsByTagName(
      

  2.   

    是document.getElementsByTagName前面的document也不能省略,可以替换成其它元素
      

  3.   

    的确,document.getElementsByTagName中,document和那个s是不能少的
      

  4.   

    我是想知道getElementsByTagName('input')有没有取不到值的情况,比如input中有readonly~,有没有什么属性的设置会使JS引擎忽略那个input.我用同事做的界面条用那段代码是可以正常显示取到的input,但是我自己的界面就是取不到。
      

  5.   

    源代码是这样的
    function ok_onclick()
    {
        var rows = new Array()    var _table = document.getElementById('<%=_Table.ClientID%>');
        var elements =_table.getElementsByTagName('input')
        alert(elements.length);//这里是我设置的弹出点 显示为[object],用同事的界面调用就没有问题
        for(var i=0;i<elements.length;i++)
        {
            if(elements.item(i).name=='_select')
            {
                if(elements.item(i).checked==true)
                {
                   var row = _table.rows[elements.item(i).parentNode.parentNode.rowIndex]
                   var controls = row.getElementsByTagName('input')
                   var objs = new Array()
                   
                   for(var j=0;j<controls.length;j++)
                   {
                        if(controls.item(j).name!='_select')
                        {
                           var obj = new Object()
                           obj.name=controls.item(j).name
                           obj.value=controls.item(j).value
                           objs[j] = obj
                        }
                   }
                   rows[rows.length]=objs
                }
            }
        }
      

  6.   

    getElementsByTagName会得到一个数组,便利一下,应该不会有错的呀
      

  7.   

    private void QueryData()//这个方法是ASP.NET后台方法,取数据并将数据以表格的形式写入页面,上面的JS方法是从页面获得后台写入到页面的数据并且保存为Array(),供其他JS方法使用。
        {
            try
            {
                _DataSource = _ISysObject.GetDataBySqlStr("exec " + this._ObjectImportEntity.ImportObject + getConditionStr());
            }
            catch { }        for (int i = 0; i < _DataSource.Rows.Count; i++)
            {
                //加选择列
                HtmlTableRow row = new HtmlTableRow();
                HtmlTableCell tcex = new HtmlTableCell();
                tcex.Attributes.Add("class", "DetailCellStyle");
                tcex.InnerHtml = "<input name=\"_select\" style=\"width:100%\" type=\"checkbox\"";
                row.Cells.Add(tcex);
                for (int j = 0; j < this._ObjectImportEntity.ImportData.Count; j++)
                {
                    ObjectImportDataEntity data = this._ObjectImportEntity.ImportData[j] as ObjectImportDataEntity;                if (data.IsDetail == 1)
                    {
                        HtmlTableCell tc = new HtmlTableCell();
                        tc.Attributes.Add("class", "DetailCellStyle");                    tc.InnerHtml = " <input name=\"" + data.AttributeCode + "\" readonly=\"readonly\"  class=\"ControlStyle\" type=\"text\" value=\"" + _DataSource.Rows[i][data.AttributeCode].ToString() +"\"   />";
                        if (data.IsShow != 1)
                        {
                            tc.Attributes["style"] = "display:none";
                        }
                        row.Cells.Add(tc);
                    }
                }            this._Table.Rows.Add(row);
            }    }
      

  8.   

    是啊~就是因为看似一点错没有的代码却有问题,这2段代码是出自项目中的一个汇入控件,汇入控件更具用户传入的表名等信息来获得不同的数据,然后将数据显示在页面上供用户选择(每行都有个CheckBox);第一段JS代码就是取得用户选择的行(一行或多行数据)放入数组。
      

  9.   

    解答:document.getElementById(' <%=_Table.ClientID%>'); 
    你的id是"<%=_Table.ClientID%>"?
    应该是document.getElementsByTagName('input')的形式
    小小心得:你起的id真是够传说、够独树一帜。
      

  10.   

    没有错,很明白错了。
    应该是document.getElementsByTagName('input'),它写成了_table.getElementsByTagName('input')
    即使你的input是包含在id为"<%=_Table.ClientID%>”的元素里,但是获得时依然用document.getElementsByTagName('input')
    这种方式,用jquery最简单,如果还不明白的话,把你的html贴出来,我看看input的位置。
      

  11.   

    这个是另外一大神写的控件~我只是调用而已,初级程序员好惨哎,我试试你的方法document.getElementsByTagName('input'),看看有没有问题,不过另外一同事也是用的他的控件咋就没问题呢,这不是说明_table.getElementsByTagName('input')也是可以的吗?
      

  12.   

    使用jquery吧,会简单很多。
    1.下载jquery.js
    jquery.js
    2.在页面中引入上述js
    <script language="javascript" src="js/jquery-1.3.2.min.js"></script>
    3.获取包含在id为<%=_Table.ClientID%>的所有input元素.
    $('#<%=_Table.ClientID%> > input')
      

  13.   

    改成document.getElementsByTagName('input')也是不行的,改之前和改这后同事的那个界面都是正常的,说明这2中方法都有效;同事的界面我是获取到本机运行的没问题,说名我的浏览器和汇入控件应该都是没问题的。只不过具体到我这个界面咋就不行了呢~
      

  14.   

    那个你看不到的页面是这样吧:
    若干input 包含在一个id为"<%=_Table.ClientID%>"。
    1.如果你只想获得那个页面的input(这个页面的input不获得),那就这样。
    引入jquery文件后function getInput()
    {

    if($('input').parent()[0].id=="<%=_Table.ClientID%>")
    {
     return $('input');
    }
    return null;
    }
    2.你想获取所有的input:
    $('input')
    你没有改的,你只是引用了一个js文件呀。对不
      

  15.   

    引入JS文件到控件中吗?那也是改了啊~
    如果引入到我自己的页面中,应该取不到的,
    应为这个控件是以var returntable = window.showModalDialog('<%=ResolveUrl("~/Public/CommandControls/ImportControl.aspx")%>?_ObjectCode=PoManage.VendorPriceMaster&_ItemNo=2&_IsHiddenQuery=false&'+DefaultParam,Math.random(),"dialogHeight: 655px; dialogWidth: 759px; center: Yes;help:no; resizable: Yes; scroll:yes;")
    这种方式弹出一个子窗体来实现的。点击确定以后窗体会关闭,返回returntable(这个就是出问题的代码要获得的数组)
      

  16.   


    在浏览器地址栏 写
    javascript:alert(document.getElementsByTagName("input").length);
    如果值为0 就表示没有 input  或者 input 不在本页 
    如果值大于0 就表示你的js 方法写早了. 
      

  17.   


    这个方法和我在页面中使用alert(document.getElementsByTagName("input").length); 是没有区别的吧
      

  18.   

    javascript:alert(document.getElementsByTagName("input").length); 
    和但是element=getElementByTagName('input')却取不到值,我alert(element.length)显示[object] 
    有区别吧,“alert(element.length)显示[object]”怎么会是object呢,要么是>=0或undefined
      

  19.   

    刚才才有时间试验了一下HenJiong提供的方法:
    在浏览器地址栏 写 
    javascript:alert(document.getElementsByTagName("input").length); 
    如果值为0 就表示没有 input  或者 input 不在本页 
    如果值大于0 就表示你的js 方法写早了. 
    ===================
    结果显示的依然是 [objec]
      

  20.   

    var _table = document.getElementById(' <%=_Table.ClientID%>'); 
    建议楼主在这句话后加上alert(_table);
    看看你的_table是什么,我感觉你的这个变量在获取值时就已经错误了。
    id怎么会有这个样子的呢“<%=_Table.ClientID%>”,这应该是获取_Table.ClientID变量值的方法,所以你的这正id应该是这个变量的值吧,如果是这样,你的_table变量的取值就是错误的
      

  21.   

    谢谢你的关注。问题不在这里。
    如果控件放在页签或其他容器上,生成页面后,ID会加上前缀的,_Table到客户端以后可能会成XXXX_Table
    这个var _table = document.getElementById('<%=_Table.ClientID%>');中包括在<%%>之间的语句会在服务器端执行哦~也就是在服务器端就把var _table = document.getElementById('<%=_Table.ClientID%>');变成var _table = document.getElementById(‘XXXX_Table’);
    所以这里是没问题的,我也alert()了,是可以正确取到表的。
    哎,继续寻觅
      

  22.   

    改了点东西,先试试吧。另外在运行JS前请保证你的页面已LOAD完毕。
    function ok_onclick()
    {
        var rows = new Array()    var objlist = document.getElementById(' <%=_Table.ClientID%>').getElementsByTagName("input");
        //var objelement =_table.getElementsByTagName('input')
        //alert(elements.length);//这里是我设置的弹出点 显示为[object],用同事的界面调用就没有问题
        for(var i=0;i <elements.length;i++)
        {
            if(elements.item(i).name=='_select')
            {
                if(elements.item(i).checked==true)
                {
                  var row = _table.rows[elements.item(i).parentNode.parentNode.rowIndex]
                  var controls = row.getElementsByTagName('input')
                  var objs = new Array()
                 
                  for(var j=0;j <controls.length;j++)
                  {
                        if(controls.item(j).name!='_select')
                        {
                          var obj = new Object()
                          obj.name=controls.item(j).name
                          obj.value=controls.item(j).value
                          objs[j] = obj
                        }
                  }
                  rows[rows.length]=objs
                }
            }
        }
      

  23.   

    如果还有问题就加上TRY CATCH 和DEBUGGER调试一下
      

  24.   

    首先谢谢你给的代码和建议,但是我试验了一下问题依然,alert数组长度显示还是[object].
    用try{...
           ...
           var elements =document.getElementsByTagName('input');
         ...
         } catch(e)
         {alert("erro");}
         finally
          {
           alert("finally")
           } 也没有抛异常。
      

  25.   

    给每个input加上id   用getElementById("name") 取值