对象未定义是什么错误?
function showSelItem(Item)
{
var obj=Item;
var str;
str="<TABLE WIDTH=100% HEIGHT=100% BORDER=0 CELLPADDING=0 CELLSPACING=0>";
for(var i=0;i<arr1.length;i++)
{
str+="<TR><TD ALIGN=left ONMOUSEOVER=this.className='Mover' ONMOUSEOUT=this.className='' ONCLICK=setValue(this,obj)>"+arr1[0]+"</TD></TR>";
}
str+="</TABLE>";
var objW=obj.offsetWidth;
var objH=obj.offsetHeight+2;
var t=obj.offsetTop;
var l=obj.offsetLeft;
while(obj=obj.offsetParent)
{
t+=obj.offsetTop;
l+=obj.offsetLeft;
}
with(sel.style)
{
top=t+objH;
left=l;
width=objW;
sel.innerHTML=str;
display=(display=='none'?'':'none');
}
}
IE的提示错误是“obj未定义”,请问怎么解决?
问题点数:100、回复次数:15Top
1 楼hugestar(dongdong)回复于 2003-12-02 08:36:25 得分 0
你多利用alert(obj.tagName);alert(obj.id);
来看你传入的obj对象是什么。怀疑你的obj=obj.offsetParent这句话有问题,
具体你再看msdn。看看obj.offsetParent是什么意思。Top
2 楼kingdomzhf(旭日东升)回复于 2003-12-02 08:52:30 得分 0
引用的对象不存在Top
3 楼hrh1979(剑仙)回复于 2003-12-02 10:05:16 得分 0
可能你的var obj=Item; 这句话不对,试试
var obj=window.document.getElementById(Item.id)
Top
4 楼xinyunyishui(心云意水)回复于 2003-12-02 12:39:48 得分 0
最大的可能:Item参数不是对象,而是对象的id之类的东西Top
5 楼hhddff(taizi)回复于 2003-12-02 13:23:37 得分 0
我也认为Item,可能不是对象,用typeof试试,看看是不是对象.Top
6 楼focusonline(Study C#)回复于 2003-12-02 14:03:12 得分 0
alert(typeof(Item));及alert(typeof(obj));的输出值都为object
其中的Item代表的是多个文本框的ID变量
在while前的alert(obj);的输出输出值还是object
while后的alert(obj);输出值就是Null了,请问这种情况如何解决呢?Top
7 楼yeefly(丰水犁)回复于 2003-12-02 15:13:45 得分 0
alert(obj.tagName + " , " + obj.offsetParent.tagName)
看看是什么Top
8 楼walkingpoison(walkingpoison)回复于 2003-12-02 15:20:19 得分 0
楼主没搞清楚下面这段代码的作用啊。
while(obj=obj.offsetParent)
{
t+=obj.offsetTop;
l+=obj.offsetLeft;
}
这段代码其实是写的比较精妙的,用于定位html元素在页面中的绝对位置(在网上copy来copy去被用的很多)。
请注意看一下,while中间用的代码是obj=obj.offsetParent,是一个赋值语句。所以这句while语句同时完成了两个动作:1.将obj赋值为它的offsetParent;2.判断obj是否为object,是的话执行while循环中的语句。
也就是说,这个循环会不断循环,直到找不到obj的offsetParent为止。这样就能够循环相加得到html元素的绝对位置。循环在结束的时候,obj是必然为null的,因为这个正是循环跳出的条件。所以说,如果你还要利用最初的obj的话,要么就直接引用Item,要么另外定义一个变量来使用。Top
9 楼gdjxlhc(超仔)回复于 2003-12-02 15:24:20 得分 0
while(obj=obj.offsetParent)
{
t+=obj.offsetTop;
l+=obj.offsetLeft;
}
你的出错的我还没找到是那里问题,不过要回应一下你上面的问题,上面语句是当obj为null时退出循环,你在while后的alert(obj)当然是null啦。Top
10 楼gdjxlhc(超仔)回复于 2003-12-02 15:35:16 得分 0
楼主,建议你把调用该函数的代码都放上来,这样大家好调试嘛Top
11 楼focusonline(Study C#)回复于 2003-12-02 15:37:01 得分 0
alert(obj.tagName + " , " + obj.offsetParent.tagName)
看看是什么
返回INPUT,TD
==============
ONCLICK=setValue(this,obj)把这里的obj换成Item错误提示是:
Item未定义
==============
在定义一次变量var OBJ=Item;或者 var OBJ=window.document.getElementById(Item.id);
在ONCLICK=setValue(this,OBJ)错误提示是OBJ未定义
============================
function setValue(Item,TXT)
{
//document.all["sel"].style.display='none';
//TXT.value=Item.innerText;
}
这个函数已经不起作用了,错误就是在ONCLICK=setValue(this,OBJ)这里
Top
12 楼focusonline(Study C#)回复于 2003-12-02 15:38:14 得分 0
页面中的文件
<DIV ID="sel" STYLE="padding:3;height:40;BORDER: #6699CC 1px solid; POSITION: absolute;width:0;background-color:#F8F8F5;display:none;cursor:default">
</DIV>Top
13 楼walkingpoison(walkingpoison)回复于 2003-12-02 15:43:07 得分 0
我已经解释得很清楚了Top
14 楼fason(咖啡人生)回复于 2003-12-02 15:43:17 得分 100
这样当然未定义啦,obj只是你函数里的变量!
改为
ONCLICK=setValue(this,'"+obj.uniqueID+"')
obj.uniqueID返回唯一的ID号
setValue中引用document.all(obj_id)来得到你要的obj.Top
15 楼adonis2222(黄面包)回复于 2003-12-02 15:44:40 得分 0
obj的名字或ID不对Top




