我遇到一个古怪的问题,页面中有许多input标签,但是element=getElementByTagName('input')却取不到值,我alert(element.length)显示[object]
1.这个[object]是什么意思?代表空吗。2.如果的确是没有取到值,那么页面中,什么情况下会取不到input?
这个问题困扰了我2天了..如果再解决不了,就要挨骂了~
1.这个[object]是什么意思?代表空吗。2.如果的确是没有取到值,那么页面中,什么情况下会取不到input?
这个问题困扰了我2天了..如果再解决不了,就要挨骂了~
getElementsByTagName(
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
}
}
}
{
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);
} }
你的id是"<%=_Table.ClientID%>"?
应该是document.getElementsByTagName('input')的形式
小小心得:你起的id真是够传说、够独树一帜。
应该是document.getElementsByTagName('input'),它写成了_table.getElementsByTagName('input')
即使你的input是包含在id为"<%=_Table.ClientID%>”的元素里,但是获得时依然用document.getElementsByTagName('input')
这种方式,用jquery最简单,如果还不明白的话,把你的html贴出来,我看看input的位置。
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')
若干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文件呀。对不
如果引入到我自己的页面中,应该取不到的,
应为这个控件是以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(这个就是出问题的代码要获得的数组)
在浏览器地址栏 写
javascript:alert(document.getElementsByTagName("input").length);
如果值为0 就表示没有 input 或者 input 不在本页
如果值大于0 就表示你的js 方法写早了.
这个方法和我在页面中使用alert(document.getElementsByTagName("input").length); 是没有区别的吧
和但是element=getElementByTagName('input')却取不到值,我alert(element.length)显示[object]
有区别吧,“alert(element.length)显示[object]”怎么会是object呢,要么是>=0或undefined
在浏览器地址栏 写
javascript:alert(document.getElementsByTagName("input").length);
如果值为0 就表示没有 input 或者 input 不在本页
如果值大于0 就表示你的js 方法写早了.
===================
结果显示的依然是 [objec]
建议楼主在这句话后加上alert(_table);
看看你的_table是什么,我感觉你的这个变量在获取值时就已经错误了。
id怎么会有这个样子的呢“<%=_Table.ClientID%>”,这应该是获取_Table.ClientID变量值的方法,所以你的这正id应该是这个变量的值吧,如果是这样,你的_table变量的取值就是错误的
如果控件放在页签或其他容器上,生成页面后,ID会加上前缀的,_Table到客户端以后可能会成XXXX_Table
这个var _table = document.getElementById('<%=_Table.ClientID%>');中包括在<%%>之间的语句会在服务器端执行哦~也就是在服务器端就把var _table = document.getElementById('<%=_Table.ClientID%>');变成var _table = document.getElementById(‘XXXX_Table’);
所以这里是没问题的,我也alert()了,是可以正确取到表的。
哎,继续寻觅
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
}
}
}
用try{...
...
var elements =document.getElementsByTagName('input');
...
} catch(e)
{alert("erro");}
finally
{
alert("finally")
} 也没有抛异常。