我正在使用带有c#和javascript的asp.net。 我有一个母版页和许多使用它的aspx页面。 在母版页上,我有一个无序列表,实际上是一个菜单。
无序列表包含ID和runat ="server"
。问题是当我将"runat ="server""
放在无序列表上时。我收到错误:"Microsoft JScript runtime error: Unable to get value of the property 'getElementsByTagName': object is null or undefined."
它指向一个script.js,它用于菜单的功能。特别是在一条线上:........
a=c; var w=document.getElementById(p), s=w.getElementsByTagName('ul'), l=s.length, i=0;
在母版页上,在头部,脚本被调用如下:
<script type="text/javascript" src="script.js">
</script>
script.js的完整代码:
var menu=function(){
var t=15,z=50,s=6,a;
function dd(n){this.n=n; this.h=[]; this.c=[]}
dd.prototype.init=function(p,c){
a=c; var w=document.getElementById(p), s=w.getElementsByTagName('ul'), l=s.length, i=0;
for(i;i<l;i++){
var h=s[i].parentNode; this.h[i]=h; this.c[i]=s[i];
h.onmouseover=new Function(this.n+'.st('+i+',true)');
h.onmouseout=new Function(this.n+'.st('+i+')');
}
}
dd.prototype.st=function(x,f){
var c=this.c[x], h=this.h[x], p=h.getElementsByTagName('a')[0];
clearInterval(c.t); c.style.overflow='hidden';
if(f){
p.className+=' '+a;
if(!c.mh){c.style.display='block'; c.style.height=''; c.mh=c.offsetHeight; c.style.height=0}
if(c.mh==c.offsetHeight){c.style.overflow='visible'}
else{c.style.zIndex=z; z++; c.t=setInterval(function(){sl(c,1)},t)}
}else{p.className=p.className.replace(a,''); c.t=setInterval(function(){sl(c,-1)},t)}
}
function sl(c,f){
var h=c.offsetHeight;
if((h<=0&&f!=1)||(h>=c.mh&&f==1)){
if(f==1){c.style.filter=''; c.style.opacity=1; c.style.overflow='visible'}
clearInterval(c.t); return
}
var d=(f==1)?Math.ceil((c.mh-h)/s):Math.ceil(h/s), o=h/c.mh;
c.style.opacity=o; c.style.filter='alpha(opacity='+(o*100)+')';
c.style.height=h+(d*f)+'px'
}
return{dd:dd}
}();
无序列表菜单在form1:
中声明这是List菜单代码:。
<ul class="menu" id="menu" runat ="server">
<li>
<a href="#" class="menulink">Mant</a>
<ul>
<li><a href="Mant.aspx">Table</a></li>
</ul>
</li>
</ul>
在form1之外,声明:
<script type="text/javascript">
var menu = new menu.dd("menu");
menu.init("menu", "menuhover");
</script>
除了script.js。
之外,所有代码都在母版页上声明我该如何解决这个问题?
...谢谢
发布编辑。
答案 0 :(得分:3)
您没有为具体答案提供足够的代码,但我的预感如下......
默认情况下,ASP.Net会更改包含runat="server"
的元素的ID,以确保所有ID都是唯一的。你有两个选择:
向ASP.Net询问JS中的客户端ID:
var clientID = "<%= txtUsername.ClientID %>";
看看ClientIDMode
property。将其设置为Static
,至少对于相关元素应该可以解决问题。
此错误也可能是在页面完全呈现之前执行JS的结果。同样,您还没有为我们提供足够的代码来做出这个决定。
答案 1 :(得分:0)
它是null
,因为JavaScript在元素创建之前执行。你可以添加到上传。
http://jsfiddle.net/vwvzN/
答案 2 :(得分:0)
试试这段代码。
<script type="text/javascript">
var menu = new menu.dd(<%= menu.ClientID %>);
menu.init(<%= menu.ClientID %>, "menuhover");
</script>