自己做了个用户控件,在aspx拖入显示<uc1:WUCAircondition ID="WUCAircondition1" runat="server" />,
然后script中写
var a = document.getElementById(' <%=WUCAircondition1.ClientID%>'); //.getElementsByTagName("UL");
alert(a);返回值为null,这是为什么呢?调用aspx中的其他控件都可以,唯独用户控件不行???
然后script中写
var a = document.getElementById(' <%=WUCAircondition1.ClientID%>'); //.getElementsByTagName("UL");
alert(a);返回值为null,这是为什么呢?调用aspx中的其他控件都可以,唯独用户控件不行???
比如 label会生成span dropdownlist会生成select 而你的没有生成一对具体id的html标签
var a = document.getElementById("WUCAircondition1");
var a = document.getElementById(' <%=textbox1.ClientID%>');
或者你在用户控件中加个panel窗口,再在客户端通过panel.clientid去检索也可以。
原来看到一些希望,想把js提取出来不要在用户控件写,然后分别指定各自ID就可以了,现在看来也不行了,到底怎么弄呢,难道这个真的不能实现吗?
if(document.getElementById("<%=WUCAircondition1.FindControl("TextBox1").ClientID %>").value == "")
{
alert("名称不能为空!");
return false;
}
alert(a.innerText);
用户控件其实只是一些html控件的组合
它最终输出的还是html控件
你可以取具体的html控件的id,再用js操作啊
你具体想做什么?
如果想对一个html集合操作的话
可以在用户控件中把所有控件都放到一个div里面,然后在页面对那个div操作
<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);
出现“缺少对象错误”
或在用户控件里写两个菜单。
查看页面代码。
document.getElementById("WUCAircondition1")
你的用户控件实际是不存在的
它都转换成里面的实际加载的html了
看看你想要操作的控件的id再进行js操作吧
直接用document.getElementById("xxx")
引用就行,为什么要绕一大圈弯路
试了下:加个runat="server"
<input id="Button1" runat="server" type="button" value="开" />原来代码改为下面就可以得到button1的值“开” var a = document.getElementById("<%=WebUserControl1.FindControl("Button1").ClientID%>").value;
alert(a);
对的,我的用户控件在html中查看的话是没有的,就是一些菜单控件里面的代码,难怪怎么也取不到,大概跟我做用户控件的方法有关,因为我就是直接将它转为.ascx的。TO:wuyq11(人生如梦)
我之前尝试过做成两个用户控件,但因为调用的是同一个JS文件,所以还是跟我做成一个用户控件多次调用的结果是一样的。谢谢两位,我知道自己出现的问题了,那用我这种方式能实现我要的功能吗?
alert(a);
那用我这种方式能实现我要的功能吗,就是在一个页面中多次使用一个菜单控件,同时又要避免JS文件的干扰,因为它总是加到第一个菜单上面。
<%@ 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;"/> /
<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');" /> /
<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>
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++;}}};
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);
}
我没有缓存的啊,后来在工程里面搜了一下,也没有发现这个属性的设置的
谢谢,对的。但现在的问题是我想实现在同一页面中多次使用这个菜单控件的功能,由于JS文件一样,所以出现一直加到第一个菜单上的问题。现在我又不能通过用户空间的ID来控制各个菜单的生成,应该用什么办法实现呢??
源码我贴上去了,虽然很长,希望大家能耐心看下,虚心求教,谢谢!
<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>
for(mi=0;mi <(x1=uld.getElementsByTagName("UL")).length;mi++)
{
if((x2=x1[mi].id)&&x2.indexOf("imenus")+1) //我发现是运行到这里的时候下拉内容都加到了第一个菜单上
这里指的是,第二次不进入page_load了,为了避免这个才会加OutPutCache