自己做了个用户控件,在aspx拖入显示<uc1:WUCAircondition ID="WUCAircondition1" runat="server" />,
然后script中写
var a = document.getElementById(' <%=WUCAircondition1.ClientID%>'); //.getElementsByTagName("UL"); 
alert(a);返回值为null,这是为什么呢?调用aspx中的其他控件都可以,唯独用户控件不行???

解决方案 »

  1.   

    因为他是一个组合 没有生成 多余的html啊..
    比如 label会生成span dropdownlist会生成select 而你的没有生成一对具体id的html标签
      

  2.   

    只要这样:
    var a = document.getElementById("WUCAircondition1"); 
      

  3.   

    建议你看生成网页的Html源代码,通过这个来确定问题的原因
      

  4.   

    1楼说得对你应该查找用户控件中某个更详细的控件才行,比如用户控件中包含有个textbox1,就可以使用
    var a = document.getElementById(' <%=textbox1.ClientID%>');
      

  5.   

    在运行页面中,选择查看源代码,看一下是否具有那个客户端ID名称的控件。
    或者你在用户控件中加个panel窗口,再在客户端通过panel.clientid去检索也可以。
      

  6.   

     <uc1:WUCAircondition ID="WUCAircondition1" runat="server" />是我做的一个菜单控件,我想在在同一个页面中多次使用这个控件的,没有想到用一个的时候完全正常,两个的时候就不行了,菜单的js文件中的函数永远只会把下拉菜单的部分加到第一个,无论沦入几个相同的控件。
    原来看到一些希望,想把js提取出来不要在用户控件写,然后分别指定各自ID就可以了,现在看来也不行了,到底怎么弄呢,难道这个真的不能实现吗? 
      

  7.   

    用户控件里面有没东西?假如用户控件里面有个TextBox1,就可以通过FindControl获取值:
    if(document.getElementById("<%=WUCAircondition1.FindControl("TextBox1").ClientID %>").value == "")
     {
          alert("名称不能为空!");
          return false;

      
      

  8.   

    如果用户控件中有Label1,则取得Label1的text是:     var a = document.getElementById("WUCAircondition1_Label1"); 
         alert(a.innerText);
      

  9.   


    用户控件其实只是一些html控件的组合
    它最终输出的还是html控件
    你可以取具体的html控件的id,再用js操作啊
    你具体想做什么?
    如果想对一个html集合操作的话
    可以在用户控件中把所有控件都放到一个div里面,然后在页面对那个div操作
      

  10.   

    楼上两位的方法我都试过,都不行,难道是我哪里出了问题?菜单控件使用下面的形式写的: 
    <div class="imrcmain0 imgl" style="width:142px;z-index:999999;position:relative; left: 0px; top: 28px;"> 
        <div class="imcm imde" id="imouter0"> 
        <ul id="imenus0"> 
    <li class="imatm"  style="width:140px;"> <a class="" href="#"> <span class="imea imeam"> <span> </span> </span>空调 </a> <div class="imsc"> <div class="imsubc" style="width:140px;top:0px;left:0px;"> <ul style=""> 
    <li> <a> <input id="Button1" type="button" value="开" /> </a> </li> ...菜单用户控件里面有button,在aspx首先试了
    1.
    if(document.getElementById("<%=WUCAircondition1.FindControl("Button1").ClientID %>").value == "")
     {
          alert("名称不能为空!");
          return false;

    出现错误“Object reference not set to an instance of an object. ”2.
    var a = document.getElementById("WUCAircondition1_Button1"); 
        alert(a.innerText); 
    出现“缺少对象错误”
      

  11.   

    两个控件里,其他控件名称可能相同或属性相同,是否用JS等调用,只获取了第一个。写两个用户控件
    或在用户控件里写两个菜单。
    查看页面代码。
    document.getElementById("WUCAircondition1")
      

  12.   

    你用http形式访问你的页面看看你的页面源代码
    你的用户控件实际是不存在的
    它都转换成里面的实际加载的html了
    看看你想要操作的控件的id再进行js操作吧
      

  13.   

    如果你这个用户控件中的html控件id为xxx
    直接用document.getElementById("xxx")
    引用就行,为什么要绕一大圈弯路
      

  14.   


    试了下:加个runat="server"
    <input id="Button1" runat="server" type="button" value="开" />原来代码改为下面就可以得到button1的值“开” var a = document.getElementById("<%=WebUserControl1.FindControl("Button1").ClientID%>").value; 
      alert(a); 
      

  15.   

    TO: qiufengilove 
    对的,我的用户控件在html中查看的话是没有的,就是一些菜单控件里面的代码,难怪怎么也取不到,大概跟我做用户控件的方法有关,因为我就是直接将它转为.ascx的。TO:wuyq11(人生如梦)
    我之前尝试过做成两个用户控件,但因为调用的是同一个JS文件,所以还是跟我做成一个用户控件多次调用的结果是一样的。谢谢两位,我知道自己出现的问题了,那用我这种方式能实现我要的功能吗?
      

  16.   

    var a = document.getElementById(" <%=WUCAircondition1.FindControl("Button1").ClientID%>").value; 
    alert(a); 
      

  17.   

    谢谢gdjlc,我加了runat="server"之后,错误“Object reference not set to an instance of an object. ”没有了。但是因为我的ID实际上不存在,所以是空的。应该是我做用户控件的方法问题,直接存为了ascx。
    那用我这种方式能实现我要的功能吗,就是在一个页面中多次使用一个菜单控件,同时又要避免JS文件的干扰,因为它总是加到第一个菜单上面。
      

  18.   

    用户控件的完整代码:
    <%@ Control Language="C#" AutoEventWireup="true" CodeFile="WUCAircondition.ascx.cs" Inherits="WUCAircondition" %>   <link href="menustyle.css" rel="Stylesheet"  type="text/css" />
     <link href="menustyle1.css" rel="Stylesheet"  type="text/css" />

     <div class="imrcmain0 imgl" style="width:142px;z-index:999999;position:relative; left: 0px; top: 28px;">
        <div class="imcm imde" id="imouter0">
    <ul id="imenus0">
    <li class="imatm"  style="width:140px;"><a class="" href="#"><span class="imea imeam"><span></span></span>空调</a> <div class="imsc"><div class="imsubc" style="width:140px;top:0px;left:0px;"><ul style="">
    <li><a>
            <input id="Button1" type="button" value="开" class="MenuButton"  onclick="change('Button1');" style="width: 16px; border-right: #000000 1px solid; border-top: #000000 1px solid; border-left: #000000 1px solid; border-bottom: #000000 1px solid;"/>&nbsp;/&nbsp;
            <input id="Button2" type="button" value="关" class="MenuButton" onclick="change('Button2');" style="width: 16px; border-right: #000000 1px solid; border-top: #000000 1px solid; border-left: #000000 1px solid; border-bottom: #000000 1px solid; height: 15px;" /></a></li>
         <li><a>
             <input id="Button15" type="button" value="复位" class="MenuButton" style="width: 29px; border-right: #000000 1px solid; border-top: #000000 1px solid; border-left: #000000 1px solid; border-bottom: #000000 1px solid;" onclick="Reset();"/></a></li>
            
    <li><a><span class="imea imeas"><span></span></span><input id="Button13" type="button" value="定时" class="MenuButton" style="width: 25px" onclick="Timing('Button13');" />&nbsp;/&nbsp;
    <input id="Button14" type="button" value="取消" class="MenuButton" style="width: 24px" onclick="Timing('Button14');" /></a> <div class="imsc"><div class="imsubc" style="width:140px;top:-18px;left:128px;"><ul style="">
    <li><a>启动时间:<input id="startTimeFrom" type="text" style="width:12px; height: 12px;" />:<input id="startTimeTo" type="text" style="width: 12px; height: 12px;" /></a></li>
    <li><a>停止时间:<input id="stopTimeFrom" type="text" style="width:12px; height: 12px;" />:<input id="stopTimeTo" type="text" style="width: 12px;height: 12px;" /></a></li></ul></div></div></li>

        
    <li><a><span class="imea imeas"><span></span></span>风速</a> <div class="imsc"><div class="imsubc" style="width:140px;top:-18px;left:128px;"><ul style="">
    <li><a><input id="Button16" type="button" value="自动" class="MenuButton" onclick="WindSpeed('Button16');"/></a></li>
    <li><a><input id="Button17" type="button" value="低速" class="MenuButton" onclick="WindSpeed('Button17');"/></a></li>
    <li><a><input id="Button18" type="button" value="中速" class="MenuButton" onclick="WindSpeed('Button18');"/></a></li>
    <li><a><input id="Button19" type="button" value="高速" class="MenuButton" onclick="WindSpeed('Button19');"/></a></li>
    <li><a><input id="Button20" type="button" value="超强" class="MenuButton" onclick="WindSpeed('Button20');"/></a></li></ul></div></div></li>


      

  19.   

    控件是不是有缓存啊 OutPutCache 如果有的话 有可能后面就是null的
      

  20.   

    用的是下载的菜单控件的JS文件代码
    function imenus_data0()
    {
    this.menu_showhide_delay = 150
    this.show_subs_onclick = false
    this.hide_focus_box = false   /*---------------------------------------------
       IE Transition Effects
       ---------------------------------------------*/
    this.subs_ie_transition_show = ""/*[end data]*/}//[IM Code]
    // ---- Add-On [0.7 KB]: Select Tag Fix for IE ----
        ;function iao_iframefix(){if(ulm_ie&&!ulm_mac&&!ulm_oldie&&!ulm_ie7)
        {
            for(var i=0;i<(x31=uld.getElementsByTagName("iframe")).length;i++)
            { 
                if((a=x31[i]).getAttribute("x30"))
                {
                    a.style.height=(x32=a.parentNode.getElementsByTagName("UL")[0]).offsetHeight;
                    a.style.width=x32.offsetWidth;
                }
            }
        }
    }
        ;function iao_ifix_add(b)
         {
                if(ulm_ie&&!ulm_mac&&!ulm_oldie&&!ulm_ie7&&window.name!="hta"&&window.name!="imopenmenu")
                {
                    b.parentNode.insertAdjacentHTML("afterBegin","<iframe src='javascript:false;' x30=1 style='z-index:-1;position:absolute;float:left;border-style:none;width:1px;height:1px;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=0);' frameborder='0'></iframe><div></div>");
                }
         }
    // ---- IM Code + Security [7.5 KB] ----
    im_version="10.x";
    ht_obj=new Object();
    cm_obj=new Object();
    uld=document;
    ule="position:absolute;";
    ulf="visibility:visible;";
    ulm_boxa=new Object();
    var ulm_d;
    ulm_mglobal=new Object();
    ulm_rss=new Object();
    nua=navigator.userAgent;
    ulm_ie=window.showHelp;
    ulm_ie7=nua.indexOf("MSIE 7")+1;
    ulm_mac=nua.indexOf("Mac")+1;
    ulm_navigator=nua.indexOf("Netscape")+1;
    ulm_version=parseFloat(navigator.vendorSub);
    ulm_oldnav=ulm_navigator&&ulm_version<7.1;
    ulm_oldie=ulm_ie&&nua.indexOf("MSIE 5.0")+1;
    ulm_iemac=ulm_ie&&ulm_mac;
    ulm_opera=nua.indexOf("Opera")+1;
    ulm_safari=nua.indexOf("afari")+1;
    x42="_";ulm_curs="cursor:hand;";if(!ulm_ie)
    {x42="z";ulm_curs="cursor:pointer;";}ulmpi=window.imenus_add_pointer_image;var x43;for(mi=0;mi<(x1=uld.getElementsByTagName("UL")).length;mi++)
    {
        if((x2=x1[mi].id)&&x2.indexOf("imenus")+1) //我发现是运行到这里的时候下拉内容都加到了第一个菜单上
        {
            dto=new window["imenus_data"+(x2=x2.substring(6))];
            ulm_boxa.dto=dto;
            ulm_boxa["dto"+x2]=dto;
            ulm_d=dto.menu_showhide_delay;
            if(ulm_ie&&!ulm_ie7&&!ulm_mac&&(b=window.imenus_efix))b(x2);
            imenus_create_menu(x1[mi].childNodes,x2+x42,dto,x2);
            (ap1=x1[mi].parentNode).id="imouter"+x2;
            ulm_mglobal["imde"+x2]=ap1;
            var dt="onmouseover";
            if(ulm_mglobal.activate_onclick)dt="onclick";
            document[dt]=function()
            {var a;
                if(!ht_obj.doc)
                {clearTimeout(ht_obj.doc);
                ht_obj.doc=null;}
                else return;
                ht_obj.doc=setTimeout("im_hide()",ulm_d);
                
                if(a=window.imenus_box_reverse)a();
                if(a=window.imenus_expandani_hideall)a();
                if(a=window.imenus_hide_pointer)a();
                if(a=window.imenus_shift_hide_all)a();
                };
                imarc("imde",ap1);
                if(ulm_oldnav)ap1.parentNode.style.position="static";
                if(!ulm_oldnav&&ulmpi)ulmpi(x1[mi],dto,0,x2);x6(x2,dto);
                if((ulm_ie&&!ulm_iemac)&&(b1=window.iao_iframefix))window.attachEvent("onload",b1);
                if((b1=window.iao_hideshow)&&(ulm_ie&&!ulm_mac))attachEvent("onload",b1);
                if(b1=window.imenus_box_ani_init)b1(ap1,dto);
                if(b1=window.imenus_expandani_init)b1(ap1,dto);
                if(b1=window.imenus_info_addmsg)b1(x2,dto);
                if(b1=window.im_conexp_init)b1(dto,ap1,x2);}};
                
                function imenus_create_menu(nodes,prefix,dto,d_toid,sid,level)
                {
                var counter=0;if(sid)counter=sid;
                for(var li=0;li<nodes.length;li++)
                {
                    var a=nodes[li];
                    var c;
                    if(a.tagName=="LI")
                    {
                        a.id="ulitem"+prefix+counter;
                        (this.atag=a.getElementsByTagName("A")[0]).id="ulaitem"+prefix+counter;
                        if(c=this.atag.getAttribute("himg"))
                        {
                            ulm_mglobal["timg"+a.id]=new Image();
                            ulm_mglobal["timg"+a.id].src=c;
                        }
                        var level;
                        a.level=(level=prefix.split(x42).length-1);
                        a.dto=d_toid;a.x4=prefix;a.sid=counter;
                        if((a1=window.imenus_drag_evts)&&level>1)a1(a,dto);
                        a.onkeydown=function(e)
                        {e=e||window.event;
                        if(e.keyCode==13&& !ulm_boxa.go)hover_handle(this,1);};
                        if(dto.hide_focus_box)
                            this.atag.onfocus=function()
                            {
                                this.blur()};imenus_se(a,dto);
                                this.isb=false;
                                
                                x29=a.getElementsByTagName("UL");
                                for(ti=0;ti<x29.length;ti++)
                                {
                                    var b=x29[ti];
                                    if(c=window.iao_ifix_add)c(b);
                                    var wgc;
                                    if(wgc=window.getComputedStyle)
                                    {
                                        if(wgc(b.parentNode,"").getPropertyValue("visibility")=="visible")
                                        {
                                            cm_obj[a.id]=a;imarc("ishow",a,1);
                                        }
                                    }
                                   else  if(ulm_ie&&b.parentNode.currentStyle.visibility=="visible")
                                   {
                                    cm_obj[a.id]=a;imarc("ishow",a,1);
                                   }
                                   if((dd=this.atag.firstChild)&&(dd.tagName=="SPAN")&&(dd.className.indexOf("imea")+1))
                                   {
                                    this.isb=true;
                                    if(ulm_mglobal.eimg_fix)
                                    imenus_efix_add(level,dd);
                                    dd.className=dd.className+"j";
                                    dd.firstChild.id="ea"+a.id;
                                    dd.setAttribute("imexpandarrow",1);
                                   }
                                   b.id="x1ub"+prefix+counter;
                                   if(!ulm_oldnav&&ulmpi)
                                   ulmpi(b.parentNode,dto,level);
                                   new imenus_create_menu(b.childNodes,prefix+counter+x42,dto,d_toid);
                                   }
                                   if((a1=window.imenus_button_add)&&level==1)a1(this.atag,dto);
                                   if(this.isb&&ulm_ie&&level==1&&document.getElementById("ssimaw"))
                                   {if(a1=window.imenus_autowidth)a1(this.atag,counter);}
                                   if(!sid&&!ulm_navigator&&!ulm_iemac&&(rssurl=a.getAttribute("rssfeed"))&&(c=window.imenus_get_rss_data))c(a,rssurl);counter++;}}};
       
      

  21.   

    接上面的JS文件 
    function imenus_se(a,dto)
        {
            var d;
            if(!(d=window.imenus_onclick_events)||!d(a,dto))
            {
            a.onmouseover=function(e){var a,b,at;clearTimeout(ht_obj.doc);ht_obj.doc=null;
            if(((at=this.getElementsByTagName("A")[0]).className.indexOf("iactive")==-1)&&at.className.indexOf("imsubtitle")==-1)imarc("ihover",at,1);
            if(b=at.getAttribute("himg")){if(!at.getAttribute("zhimg"))at.setAttribute("zhimg",at.style.backgroundImage);at.style.backgroundImage="url("+b+")";}
            if(b=window.imenus_shift)b(at);
            if(b=window.imenus_expandani_animateit)b(this);
            if((ulm_boxa["go"+parseInt(this.id.substring(6))])&&(a=this.getElementsByTagName("UL")[0]))imenus_box_ani(true,a,this,e);else {if(this.className.indexOf("ishow")==-1)ht_obj[this.level]=setTimeout("hover_handle(uld.getElementById('"+this.id+"'))",ulm_d);
            if(a=window.imenus_box_reverse)a(this);}if(a=window.im_conexp_show)a(this);if(!window.imenus_chover){im_kille(e);return false;}};a.onmouseout=function(e){var a,b;
            if((a=this.getElementsByTagName("A")[0]).className.indexOf("iactive")==-1){imarc("ihover",a);imarc("iactive",a);}
            if(this.className.indexOf("ishow")==-1&&(b=a.getAttribute("zhimg")))a.style.backgroundImage=b;clearTimeout(ht_obj[this.level]);
            if(!window.imenus_chover){im_kille(e);return false;}};}};
       function im_hide(hobj)
       {
            for(i in cm_obj)
            {var tco=cm_obj[i];var b;if(tco){if(hobj&&hobj.id.indexOf(tco.id)+1)continue;imarc("ishow",tco);var at=tco.getElementsByTagName("A")[0];imarc("ihover",at);imarc("iactive",at);if(b=at.getAttribute("zhimg"))at.style.backgroundImage=b;cm_obj[i]=null;i++;if(ulm_boxa["go"+parseInt(tco.id.substring(6))])imenus_box_h(tco);var a;
            if(a=window.imenus_expandani_hideit)a(tco);
            if(a=window.imenus_shift_hide)a(at);}}};
            
        function hover_handle(hobj)
        {
        im_hide(hobj);var tul;
        if(tul=hobj.getElementsByTagName("UL")[0])
        {
            try
            {
                if((ulm_ie&&!ulm_mac)&&(plobj=tul.filters[0])&&tul.parentNode.currentStyle.visibility=="hidden")
                {
                    if(x43)x43.stop();plobj.apply();plobj.play();x43=plobj;}}
            catch(e){}
            var a;
            if(a=window.imenus_stack_init)a(tul);
            if(a=window.iao_apos)a(tul);
            var at=hobj.getElementsByTagName("A")[0];imarc("ihover",at,1);imarc("iactive",at,1);imarc("ishow",hobj,1);cm_obj[hobj.id]=hobj;
            if(a=window.imenus_stack_ani)a(tul);}};
            
        function imarc(name,obj,add)
        {
            if(add)
            {
                if(obj.className.indexOf(name)==-1)obj.className+=(obj.className?' ':'')+name;}
                else {obj.className=obj.className.replace(" "+name,"");obj.className=obj.className.replace(name,"");}};
                
        function x26(obj)
        {
            var x=0;var y=0;do{x+=obj.offsetLeft;y+=obj.offsetTop;}while(obj=obj.offsetParent)return new Array(x,y);};
            
        function im_kille(e)
        {
            if(!e)e=event;e.cancelBubble=true;if(e.stopPropagation)e.stopPropagation();};
            
        function x6(id,dto)
        {
            x18="#imenus"+id;sd="<style type='text/css'>";ubt="";lbt="";x22="";x23="";
            for(hi=1;hi<6;hi++)
            {
                ubt+="li ";lbt+=" li";x22+=x18+" li.ishow "+ubt+" .imsubc";x23+=x18+lbt+".ishow .imsubc";
                if(hi!=5){x22+=",";x23+=",";}}sd+=x22+"{visibility:hidden;}";sd+=x23+"{"+ulf+"}";sd+=x18+" li ul{"+((!window.imenus_drag_evts&&window.name!="hta"&&ulm_ie)?dto.subs_ie_transition_show:"")+"}";
                if(ulm_oldnav)sd+=".imcm .imsc{position:absolute;}";
                if(ulm_ie&&!((dcm=document.compatMode)&&dcm=="CSS1Compat"))sd+=".imgl .imbrc{height:1px;}";
                if(a1=window.imenus_drag_styles)sd+=a1(id,dto);
                if(a1=window.imenus_info_styles)sd+=a1(id,dto);
                if(ulm_mglobal.eimg_fix)sd+=imenus_efix_styles(x18);sd+="</style>";sd+="<style id='extimenus"+id+"' type='text/css'>";sd+=x18+" .ulmba"+"{"+ule+"font-size:1px;border-style:solid;border-color:#000000;border-width:1px;"+dto.box_animation_styles+"}";sd+="</style>";uld.write(sd);
        }
      

  22.   

    TO: maddemon
    我没有缓存的啊,后来在工程里面搜了一下,也没有发现这个属性的设置的 
      

  23.   

    你没有加runat属性,就是一般的html控件放在用户自定义控件里面id不会变的document.getElementById("没有加runat='server'的html控件的id");
      

  24.   

    TO:showbo
    谢谢,对的。但现在的问题是我想实现在同一页面中多次使用这个菜单控件的功能,由于JS文件一样,所以出现一直加到第一个菜单上的问题。现在我又不能通过用户空间的ID来控制各个菜单的生成,应该用什么办法实现呢??
    源码我贴上去了,虽然很长,希望大家能耐心看下,虚心求教,谢谢!
      

  25.   

    <input id="Button16" type="button" value="自动" class="MenuButton" onclick="WindSpeed('Button16');"/> 
    <input id="Button16" type="button" value="自动" class="MenuButton" onclick="WindSpeed('Button16');"/> 主要是两个用户控件在页面中生成的内容是一样的,如里面随便这一个在页面中就出现了两次,导致js总是加到第一个菜单上面。 
    所以认为:要把上面按钮的事件加上runat="server",这样这两个按钮在客户端生成的id就不一样了,另外onclick="WindSpeed('Button16');因为Button16是按钮的id,所以可以改为onclick="WindSpeed(this.id);
    完整就是:
    <input id="Button16" type="button" runat="server" value="自动" class="MenuButton" onclick="WindSpeed(this.id);"/> 
    同样用户控件里面的其它按钮也类似这样改。------------------------------------------
    附我的小例子:用户控件页:<input id="Button1" runat="server" type="button" value="开" onclick="test(this.id);" />
    <input id="Button2" runat="server" type="button" value="开" onclick="test(this.id);" />内容页:
     <script type="text/javascript">
        function test(obj) {   
             alert(obj); 
         }
    </script>
      

  26.   

    TO:gdjlc我按照你的方法做了,生成的id是不一样了,但问题还是存在,还是只显示一个菜单,如果我不用JS文件的话,显示的是两个,所以我想还是那个很长的代码的问题,我在上面的菜单源码中标记了
    for(mi=0;mi <(x1=uld.getElementsByTagName("UL")).length;mi++) 

        if((x2=x1[mi].id)&&x2.indexOf("imenus")+1) //我发现是运行到这里的时候下拉内容都加到了第一个菜单上 
      

  27.   

    关注,楼主很有心。。实在不行换个方法吧菜单实现的方法很多的  前段时间我做gridview的右键菜单也是郁闷了蛮久 
      

  28.   

    两次用到的时候,id的值会自动改变的,因为在一个网页中,一般不能有两个id相同的,建议楼主先看下源代码,在写得到对应id的值
      

  29.   


    这里指的是,第二次不进入page_load了,为了避免这个才会加OutPutCache