Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
asp.net,javascript,无法获取属性getElementsByTagName的值_Javascript_Asp.net_Getelementbyid - Fatal编程技术网

asp.net,javascript,无法获取属性getElementsByTagName的值

asp.net,javascript,无法获取属性getElementsByTagName的值,javascript,asp.net,getelementbyid,Javascript,Asp.net,Getelementbyid,我使用asp.net和c#和javascript。 我有一个母版页和许多使用它的aspx页面。 在母版页上,我有一个无序列表,实际上是一个菜单 无序列表具有ID和runat=“server”。问题是当我将“runat=“server”“放在无序列表中时。我得到错误:“Microsoft JScript运行时错误:无法获取属性“getElementsByTagName”的值:对象为null或未定义。”并指向用于菜单功能的script.js。特别是在一行: a=c; var w=document.g

我使用asp.net和c#和javascript。 我有一个母版页和许多使用它的aspx页面。 在母版页上,我有一个无序列表,实际上是一个菜单

无序列表具有ID和
runat=“server”
。问题是当我将
“runat=“server”“
放在无序列表中时。我得到错误:
“Microsoft JScript运行时错误:无法获取属性“getElementsByTagName”的值:对象为null或未定义。”
并指向用于菜单功能的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}
}();
var菜单=函数(){
变量t=15,z=50,s=6,a;
函数dd(n){this.n=n;this.h=[];this.c=[]}
dd.prototype.init=函数(p,c){
a=c;var w=document.getElementById(p),s=w.getElementsByTagName('ul'),l=s.length,i=0;

对于(i;i您没有提供足够的代码来给出具体的答案,但我的直觉如下

默认情况下,ASP.Net会更改包含
runat=“server”
的元素的ID,以确保所有ID都是唯一的。您有两个选择:

  • 向ASP.Net询问JS中的客户端ID:

    var clientID=“”;

  • 查看。将其设置为
    Static
    ,至少对于相关元素,应该可以解决该问题


  • 此错误也可能是在页面完全呈现之前执行JS的结果。同样,您没有提供足够的代码供我们进行此判断。

    它是
    null
    ,因为在创建元素之前执行了JavaScript。您可以添加到onload。

    詹姆斯·希尔似乎有正确的方法。

    试试这段代码

    <script type="text/javascript">
    var menu = new menu.dd(<%= menu.ClientID %>);
    menu.init(<%= menu.ClientID %>, "menuhover");
    </script>
    
    
    var menu=new menu.dd();
    menu.init(,“menuhover”);
    
    您需要包含更多的上下文,特别是在声明和/或分配p的位置。此错误很可能来自文档。getElementById(p)失败。@pyram,您是否尝试了我建议的一个ID修复程序?是否可以发布一个复制该问题的上下文?无法-是否可以将该问题复制到母版页之外?
    <script type="text/javascript">
    var menu = new menu.dd("menu");
    menu.init("menu", "menuhover");
    </script>
    
    <script type="text/javascript">
    var menu = new menu.dd(<%= menu.ClientID %>);
    menu.init(<%= menu.ClientID %>, "menuhover");
    </script>