1.这个[object]是什么意思?代表空吗。
2.如果的确是没有取到值,那么页面中,什么情况下会取不到input?
这个问题困扰了我2天了..如果再解决不了,就要挨骂了~
44 个解决方案
#1
少了个s
getElement sByTagName(
getElement sByTagName(
#2
是document.getElementsByTagName前面的document也不能省略,可以替换成其它元素
#3
UP
#4
的确,document.getElementsByTagName中,document和那个s是不能少的
#5
#6
那个S我代码里面是没少的。
#7
我是想知道getElementsByTagName('input')有没有取不到值的情况,比如input中有readonly~,有没有什么属性的设置会使JS引擎忽略那个input.我用同事做的界面条用那段代码是可以正常显示取到的input,但是我自己的界面就是取不到。
#8
贴代码
#9
源代码是这样的
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
}
}
}
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
}
}
}
#10
getElementsByTagName会得到一个数组,便利一下,应该不会有错的呀
#11
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);
}
}
{
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);
}
}
#12
是啊~就是因为看似一点错没有的代码却有问题,这2段代码是出自项目中的一个汇入控件,汇入控件更具用户传入的表名等信息来获得不同的数据,然后将数据显示在页面上供用户选择(每行都有个CheckBox);第一段JS代码就是取得用户选择的行(一行或多行数据)放入数组。
#13
解答:document.getElementById(' <%=_Table.ClientID%>');
你的id是"<%=_Table.ClientID%>"?
应该是document.getElementsByTagName('input')的形式
小小心得:你起的id真是够传说、够独树一帜。。。。
你的id是"<%=_Table.ClientID%>"?
应该是document.getElementsByTagName('input')的形式
小小心得:你起的id真是够传说、够独树一帜。。。。
#14
没有错,很明白错了。
应该是document.getElementsByTagName('input'),它写成了_table.getElementsByTagName('input')
即使你的input是包含在id为"<%=_Table.ClientID%>”的元素里,但是获得时依然用document.getElementsByTagName('input')
这种方式,用jquery最简单,如果还不明白的话,把你的html贴出来,我看看input的位置。
应该是document.getElementsByTagName('input'),它写成了_table.getElementsByTagName('input')
即使你的input是包含在id为"<%=_Table.ClientID%>”的元素里,但是获得时依然用document.getElementsByTagName('input')
这种方式,用jquery最简单,如果还不明白的话,把你的html贴出来,我看看input的位置。
#15
这个是另外一大神写的控件~我只是调用而已,初级程序员好惨哎,我试试你的方法document.getElementsByTagName('input'),看看有没有问题,不过另外一同事也是用的他的控件咋就没问题呢,这不是说明_table.getElementsByTagName('input')也是可以的吗?
#16
少了个s
#17
使用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')
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')
#18
改成document.getElementsByTagName('input')也是不行的,改之前和改这后同事的那个界面都是正常的,说明这2中方法都有效;同事的界面我是获取到本机运行的没问题,说名我的浏览器和汇入控件应该都是没问题的。只不过具体到我这个界面咋就不行了呢~
#19
哎,这项目是用的都是以前的架构,控件啥的都做好了~小程序员没权利改只能用~
#20
那个你看不到的页面是这样吧:
若干input 包含在一个id为"<%=_Table.ClientID%>"。
1.如果你只想获得那个页面的input(这个页面的input不获得),那就这样。
引入jquery文件后
2.你想获取所有的input:
$('input')
你没有改的,你只是引用了一个js文件呀。对不
若干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文件呀。对不
#21
引入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(这个就是出问题的代码要获得的数组)
如果引入到我自己的页面中,应该取不到的,
应为这个控件是以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(这个就是出问题的代码要获得的数组)
#22
谢谢你的关注,我再想想办法,如果问题解决了,我会马上把原因发上来供大家参考
#23
在浏览器地址栏 写
javascript:alert(document.getElementsByTagName("input").length);
如果值为0 就表示没有 input 或者 input 不在本页
如果值大于0 就表示你的js 方法写早了.
#24
学习咯
#25
路过,学习了
#26
这个方法和我在页面中使用alert(document.getElementsByTagName("input").length); 是没有区别的吧
#27
javascript:alert(document.getElementsByTagName("input").length);
和但是element=getElementByTagName('input')却取不到值,我alert(element.length)显示[object]
有区别吧,“alert(element.length)显示[object]”怎么会是object呢,要么是>=0或undefined
和但是element=getElementByTagName('input')却取不到值,我alert(element.length)显示[object]
有区别吧,“alert(element.length)显示[object]”怎么会是object呢,要么是>=0或undefined
#28
肯定是代码有问题,再仔细研究下吧,
#29
这个问题还没有解决~写那汇入控件的人也说可以先忽略,但是这么诡异的问题,如果不解决我死不瞑目啊~~
#30
#31
刚才才有时间试验了一下HenJiong提供的方法:
在浏览器地址栏 写
javascript:alert(document.getElementsByTagName("input").length);
如果值为0 就表示没有 input 或者 input 不在本页
如果值大于0 就表示你的js 方法写早了.
===================
结果显示的依然是 [objec]
在浏览器地址栏 写
javascript:alert(document.getElementsByTagName("input").length);
如果值为0 就表示没有 input 或者 input 不在本页
如果值大于0 就表示你的js 方法写早了.
===================
结果显示的依然是 [objec]
#32
最近忙得不可开交~这个问题还是纯在的,单从代码看我真的看不出问题。希望哪天头脑清醒的时候能让我找到问题的原因。。。。朋友们敬请关注
#33
var _table = document.getElementById(' <%=_Table.ClientID%>');
建议楼主在这句话后加上alert(_table);
看看你的_table是什么,我感觉你的这个变量在获取值时就已经错误了。
id怎么会有这个样子的呢“<%=_Table.ClientID%>”,这应该是获取_Table.ClientID变量值的方法,所以你的这正id应该是这个变量的值吧,如果是这样,你的_table变量的取值就是错误的
建议楼主在这句话后加上alert(_table);
看看你的_table是什么,我感觉你的这个变量在获取值时就已经错误了。
id怎么会有这个样子的呢“<%=_Table.ClientID%>”,这应该是获取_Table.ClientID变量值的方法,所以你的这正id应该是这个变量的值吧,如果是这样,你的_table变量的取值就是错误的
#34
谢谢你的关注。问题不在这里。
如果控件放在页签或其他容器上,生成页面后,ID会加上前缀的,_Table到客户端以后可能会成XXXX_Table
这个var _table = document.getElementById('<%=_Table.ClientID%>');中包括在<%%>之间的语句会在服务器端执行哦~也就是在服务器端就把var _table = document.getElementById('<%=_Table.ClientID%>');变成var _table = document.getElementById(‘XXXX_Table’);
所以这里是没问题的,我也alert()了,是可以正确取到表的。
哎,继续寻觅
如果控件放在页签或其他容器上,生成页面后,ID会加上前缀的,_Table到客户端以后可能会成XXXX_Table
这个var _table = document.getElementById('<%=_Table.ClientID%>');中包括在<%%>之间的语句会在服务器端执行哦~也就是在服务器端就把var _table = document.getElementById('<%=_Table.ClientID%>');变成var _table = document.getElementById(‘XXXX_Table’);
所以这里是没问题的,我也alert()了,是可以正确取到表的。
哎,继续寻觅
#35
改了点东西,先试试吧。另外在运行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
}
}
}
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
}
}
}
#36
如果还有问题就加上TRY CATCH 和DEBUGGER调试一下
#37
学习路过
#38
modify
#39
document.getElementsByTagName()
#40
是的,最好调试一下。就会发现问题所在了。
#41
不是行不到,是得到了一个数组。
#42
首先谢谢你给的代码和建议,但是我试验了一下问题依然,alert数组长度显示还是[object].
用try{...
...
var elements =document.getElementsByTagName('input');
...
} catch(e)
{alert("erro");}
finally
{
alert("finally")
} 也没有抛异常。
#43
给每个input加上id 用getElementById("name") 取值
#44
少了个s。
#1
少了个s
getElement sByTagName(
getElement sByTagName(
#2
是document.getElementsByTagName前面的document也不能省略,可以替换成其它元素
#3
UP
#4
的确,document.getElementsByTagName中,document和那个s是不能少的
#5
#6
那个S我代码里面是没少的。
#7
我是想知道getElementsByTagName('input')有没有取不到值的情况,比如input中有readonly~,有没有什么属性的设置会使JS引擎忽略那个input.我用同事做的界面条用那段代码是可以正常显示取到的input,但是我自己的界面就是取不到。
#8
贴代码
#9
源代码是这样的
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
}
}
}
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
}
}
}
#10
getElementsByTagName会得到一个数组,便利一下,应该不会有错的呀
#11
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);
}
}
{
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);
}
}
#12
是啊~就是因为看似一点错没有的代码却有问题,这2段代码是出自项目中的一个汇入控件,汇入控件更具用户传入的表名等信息来获得不同的数据,然后将数据显示在页面上供用户选择(每行都有个CheckBox);第一段JS代码就是取得用户选择的行(一行或多行数据)放入数组。
#13
解答:document.getElementById(' <%=_Table.ClientID%>');
你的id是"<%=_Table.ClientID%>"?
应该是document.getElementsByTagName('input')的形式
小小心得:你起的id真是够传说、够独树一帜。。。。
你的id是"<%=_Table.ClientID%>"?
应该是document.getElementsByTagName('input')的形式
小小心得:你起的id真是够传说、够独树一帜。。。。
#14
没有错,很明白错了。
应该是document.getElementsByTagName('input'),它写成了_table.getElementsByTagName('input')
即使你的input是包含在id为"<%=_Table.ClientID%>”的元素里,但是获得时依然用document.getElementsByTagName('input')
这种方式,用jquery最简单,如果还不明白的话,把你的html贴出来,我看看input的位置。
应该是document.getElementsByTagName('input'),它写成了_table.getElementsByTagName('input')
即使你的input是包含在id为"<%=_Table.ClientID%>”的元素里,但是获得时依然用document.getElementsByTagName('input')
这种方式,用jquery最简单,如果还不明白的话,把你的html贴出来,我看看input的位置。
#15
这个是另外一大神写的控件~我只是调用而已,初级程序员好惨哎,我试试你的方法document.getElementsByTagName('input'),看看有没有问题,不过另外一同事也是用的他的控件咋就没问题呢,这不是说明_table.getElementsByTagName('input')也是可以的吗?
#16
少了个s
#17
使用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')
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')
#18
改成document.getElementsByTagName('input')也是不行的,改之前和改这后同事的那个界面都是正常的,说明这2中方法都有效;同事的界面我是获取到本机运行的没问题,说名我的浏览器和汇入控件应该都是没问题的。只不过具体到我这个界面咋就不行了呢~
#19
哎,这项目是用的都是以前的架构,控件啥的都做好了~小程序员没权利改只能用~
#20
那个你看不到的页面是这样吧:
若干input 包含在一个id为"<%=_Table.ClientID%>"。
1.如果你只想获得那个页面的input(这个页面的input不获得),那就这样。
引入jquery文件后
2.你想获取所有的input:
$('input')
你没有改的,你只是引用了一个js文件呀。对不
若干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文件呀。对不
#21
引入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(这个就是出问题的代码要获得的数组)
如果引入到我自己的页面中,应该取不到的,
应为这个控件是以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(这个就是出问题的代码要获得的数组)
#22
谢谢你的关注,我再想想办法,如果问题解决了,我会马上把原因发上来供大家参考
#23
在浏览器地址栏 写
javascript:alert(document.getElementsByTagName("input").length);
如果值为0 就表示没有 input 或者 input 不在本页
如果值大于0 就表示你的js 方法写早了.
#24
学习咯
#25
路过,学习了
#26
这个方法和我在页面中使用alert(document.getElementsByTagName("input").length); 是没有区别的吧
#27
javascript:alert(document.getElementsByTagName("input").length);
和但是element=getElementByTagName('input')却取不到值,我alert(element.length)显示[object]
有区别吧,“alert(element.length)显示[object]”怎么会是object呢,要么是>=0或undefined
和但是element=getElementByTagName('input')却取不到值,我alert(element.length)显示[object]
有区别吧,“alert(element.length)显示[object]”怎么会是object呢,要么是>=0或undefined
#28
肯定是代码有问题,再仔细研究下吧,
#29
这个问题还没有解决~写那汇入控件的人也说可以先忽略,但是这么诡异的问题,如果不解决我死不瞑目啊~~
#30
#31
刚才才有时间试验了一下HenJiong提供的方法:
在浏览器地址栏 写
javascript:alert(document.getElementsByTagName("input").length);
如果值为0 就表示没有 input 或者 input 不在本页
如果值大于0 就表示你的js 方法写早了.
===================
结果显示的依然是 [objec]
在浏览器地址栏 写
javascript:alert(document.getElementsByTagName("input").length);
如果值为0 就表示没有 input 或者 input 不在本页
如果值大于0 就表示你的js 方法写早了.
===================
结果显示的依然是 [objec]
#32
最近忙得不可开交~这个问题还是纯在的,单从代码看我真的看不出问题。希望哪天头脑清醒的时候能让我找到问题的原因。。。。朋友们敬请关注
#33
var _table = document.getElementById(' <%=_Table.ClientID%>');
建议楼主在这句话后加上alert(_table);
看看你的_table是什么,我感觉你的这个变量在获取值时就已经错误了。
id怎么会有这个样子的呢“<%=_Table.ClientID%>”,这应该是获取_Table.ClientID变量值的方法,所以你的这正id应该是这个变量的值吧,如果是这样,你的_table变量的取值就是错误的
建议楼主在这句话后加上alert(_table);
看看你的_table是什么,我感觉你的这个变量在获取值时就已经错误了。
id怎么会有这个样子的呢“<%=_Table.ClientID%>”,这应该是获取_Table.ClientID变量值的方法,所以你的这正id应该是这个变量的值吧,如果是这样,你的_table变量的取值就是错误的
#34
谢谢你的关注。问题不在这里。
如果控件放在页签或其他容器上,生成页面后,ID会加上前缀的,_Table到客户端以后可能会成XXXX_Table
这个var _table = document.getElementById('<%=_Table.ClientID%>');中包括在<%%>之间的语句会在服务器端执行哦~也就是在服务器端就把var _table = document.getElementById('<%=_Table.ClientID%>');变成var _table = document.getElementById(‘XXXX_Table’);
所以这里是没问题的,我也alert()了,是可以正确取到表的。
哎,继续寻觅
如果控件放在页签或其他容器上,生成页面后,ID会加上前缀的,_Table到客户端以后可能会成XXXX_Table
这个var _table = document.getElementById('<%=_Table.ClientID%>');中包括在<%%>之间的语句会在服务器端执行哦~也就是在服务器端就把var _table = document.getElementById('<%=_Table.ClientID%>');变成var _table = document.getElementById(‘XXXX_Table’);
所以这里是没问题的,我也alert()了,是可以正确取到表的。
哎,继续寻觅
#35
改了点东西,先试试吧。另外在运行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
}
}
}
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
}
}
}
#36
如果还有问题就加上TRY CATCH 和DEBUGGER调试一下
#37
学习路过
#38
modify
#39
document.getElementsByTagName()
#40
是的,最好调试一下。就会发现问题所在了。
#41
不是行不到,是得到了一个数组。
#42
首先谢谢你给的代码和建议,但是我试验了一下问题依然,alert数组长度显示还是[object].
用try{...
...
var elements =document.getElementsByTagName('input');
...
} catch(e)
{alert("erro");}
finally
{
alert("finally")
} 也没有抛异常。
#43
给每个input加上id 用getElementById("name") 取值
#44
少了个s。