请问怎样控制同一id的对象

kidd_cen 2002-11-25 07:45:59
例如有几个对象我把它付同一id,例如一个textfield,然后用js把他们的value同改宁一个值,怎搞?
...全文
42 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
emu 2002-12-05
  • 打赏
  • 举报
回复
嘿嘿,真的是写错了。
emu 2002-11-28
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/TopicView1.asp?id=1210925
emu 2002-11-28
  • 打赏
  • 举报
回复
freefalcon(心宇):
我的哪里错了?你的倒是有点问题:
undefined在IE5下面不是常量,应该用null比较好。
此外你的函数没能区分name和id啊:

<BODY>
<input type="text" id=txt>
<input type="text" name=txt>
<input type="text" id=txt>

<input type="button" value=check onclick=check()>
<script>
function document.getElementsById(sId){
var objects=document.all[sId];
var collObjects = new Array();
if(objects==null)return collObjects;
if(objects.length==null){
collObjects[0]=objects;
return collObjects;
}
for (var i=0;i<objects.length;i++)
collObjects[i]=objects[i];
return collObjects;
}
function check(){
var texts=document.getElementsById("txt");
for(i=0;i<texts.length;i++)
alert(texts[i].value);
}
</script>

</BODY>

第2个input没有指定id的,你的函数还是把它逮出来了。

后面那个不复制的有一样的问题,我之所以要复制就是为了判断id是否符合的嘛,你还把它去掉?


qiushuiwuhen 2002-11-28
  • 打赏
  • 举报
回复
<textarea id=test></textarea>
<textarea name=test></textarea>
<script>
var o=document.getElementsByName("test")
for(i=0;i<o.length;i++)if(o[i].id=="test")o[i].value="freefalcon";
</script>
freefalcon 2002-11-28
  • 打赏
  • 举报
回复
哎,其实最后的复制都是多余的
<script>
function document.getElementsById(sId){
var objects=document.all[sId];
var collObjects = new Array();
if(objects==null)return collObjects;
if(objects.length==undefined){
collObjects[0]=objects;
return collObjects;
}
return objects;
}
freefalcon 2002-11-28
  • 打赏
  • 举报
回复
我是说你的r.length==null不行,应该先判断一下,我的if(objects==null)return collObjects;就是为了解决这个问题的
我最后写的这个和你最先写的是有区别的,正如你所说:
document.all[]和getElementsByName()在同名的元素只有一个的时候的返回有差别:前者返回元素,后者返回只有一个元素的集合
而且在id不存在的时候,前者返回的值是null,后者是一个空的集合
emu 2002-11-28
  • 打赏
  • 举报
回复
对不存在的id,应该在上一句if(objects==null)return collObjects;就返回了,不应该到下面来出错啊。

你写的函数和我最先帖的那个有差别吗??
freefalcon 2002-11-28
  • 打赏
  • 举报
回复
ft,太郁闷了,getElementsByName()居然获得的不只是具有相同的name的对象集合,还包括id!!!这也太名不副实了吧! 谢谢秋水!
to emu(ston):不好意思,谢谢提醒。主要是我对document.all[]返回的对象不是很清楚,:-),不过你的if(r.length==null)还是有问题,你可以试一个不存在的id,看有没有问题,反正在我这儿会报错。
好了,有了秋水的提示,我们俩的笨办法都不需要了,如下:
<BODY>
<input type="text" id=txt value=1>
<input type="text" name=txt value=2>
<input type="text" id=txt value=3>
<input type="button" value=check onclick=check()>

<script>
function document.getElementsById(sId){
var objects=document.getElementsByName(sId);
var collObjects = new Array();
for (var i=0;i<objects.length;i++)
if(objects[i].id==sId)
collObjects[collObjects.length]=objects[i];
return collObjects;
}
function check(){
var texts=document.getElementsById("txt");
for(i=0;i<texts.length;i++)
alert(texts[i].value);
}
</script>
</BODY>
freefalcon 2002-11-27
  • 打赏
  • 举报
回复
想法不错,但你写的方法怎么那么多错误呀,我修改了一下 :-)
<input type="text" id=txt>
<input type="text" id=txt>
<input type="text" id=txt>

<input type="button" value=check onclick=check()>
<script>
function document.getElementsById(sId){
var objects=document.all[sId];
var collObjects = new Array();
if(objects==null)return collObjects;
if(objects.length==undefined){
collObjects[0]=objects;
return collObjects;
}
for (var i=0;i<objects.length;i++)
collObjects[i]=objects[i];
return collObjects;
}
function check(){
var texts=document.getElementsById("txt");
for(i=0;i<texts.length;i++)
alert(texts[i].value);
}
</script>
emu 2002-11-27
  • 打赏
  • 举报
回复
呜~~那么多人想蒙我

to:ChinaPcFan(电脑爱好者)
------------------------------------------------
getElementById 返回的是相同ID的第一个对象
getElementsByName 返回的是相同名字或者ID的对象的集合
我写的getElementsById 是为了返回相同ID对象的集合,名字相同的不算。
你看我前面帖的代码,getElementsByName把<textarea id=test></textarea>和<textarea name=test></textarea>等同处理了,要是用我的函数就会忽略后面那个。
-------------------------------------------------

runmin(*^_^*) :
也就是 document.all.tags() 呵呵,反正都一样。

不过all()和getElementsByName()在同名的元素只有一个的时候的返回有差别:前者返回元素,后者返回只有一个元素的集合。

blues-star 2002-11-27
  • 打赏
  • 举报
回复
document.getElementsByTagName();

还有这个方法。

不过还是喜欢用all集合。
emu 2002-11-26
  • 打赏
  • 举报
回复
呵呵心血来潮给document添了个方法:

function document.getElementsById(id){
var r=document.all[id];
if(r.length==null) r=[r];
var result = new Array();
for (var i=0;i<r.length;i++)
if (r[i].id==id)
result[result.length]=r[i];
return result;
}

剩下的就不说了吧?
ChinaPcFan 2002-11-26
  • 打赏
  • 举报
回复
>>什么世道,连秋水也来蒙我?

老兄,这不是在蒙你呀,DHTML中document对象本来就有“getElementById”和“getElementsByName”方法。
emu 2002-11-26
  • 打赏
  • 举报
回复
什么世道,连秋水也来蒙我?

<textarea id=test></textarea>
<textarea name=test></textarea>
<script>
var o=document.getElementsByName("test")
for(i=0;i<o.length;i++)o[i].value="freefalcon";
</script>
kidd_cen 2002-11-26
  • 打赏
  • 举报
回复
那如果那些对象是在一个隐藏贞里呢
qiushuiwuhen 2002-11-26
  • 打赏
  • 举报
回复
不用心血来潮,本来就有,呵呵

<textarea id=test></textarea>
<textarea id=test></textarea>
<script>
var o=document.getElementsByName("test")
for(i=0;i<o.length;i++)o[i].value="freefalcon";
</script>
freefalcon 2002-11-25
  • 打赏
  • 举报
回复
<textarea id=test></textarea>
<textarea id=test></textarea>
<script>
for(i=0;i<document.all.test.length;i++)
document.all.test[i].value="freefalcon";
</script>

87,955

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧