2010-03-28 73 views
0

我有一个用户控件在单击按钮时隐藏div。在用户控件中使用getElementById

<asp:LinkButton ID="lnkbtn" OnClientClick="ShowHide(); return false;" runat="server" /> 
<div id="popupPage" style="display:none;"> 
</div> 


function ShowHideGotoPopUp() { 
     var ob = document.getElementById("popupPage"); 
     if (ob.style.display == "none") 
      ob.style.display = "block"; 
     else ob.style.display = "none" 

    } 

当我放置在页面上多于1个用户控件时,有一个问题,所有控件都具有相同id = popupPage的div。

回答

0

你应该重新思考这是如何工作的;该ID对于HTML页面应该是唯一的。

但是,如果你要坚持你目前的设计,这样的事情应该工作...

<asp:LinkButton ID="lnkbtn" OnClientClick="ShowHide(this.nextSibling); return false;" runat="server" /> 
<div id="popupPage" style="display:none;"> 
</div> 
function ShowHideGotoPopUp(ob) { 
     if (ob.style.display == "none") 
      ob.style.display = "block"; 
     else ob.style.display = "none" 

    } 
+0

如何设置一个唯一的ID到divs如果它是在一个控制和用户可以把他的网页n *控制? – toraan 2010-03-28 16:36:36

+0

控件每次渲染时都需要生成一个唯一的ID。这应该很容易。然后你的函数可以把ID作为参数(好主意),或者函数可以包含uniqueID作为它的名字的一部分,所以函数不会相互覆盖。 – Bialecki 2010-03-28 17:10:15

+0

Bialecki,你能告诉我怎样才能为控件生成唯一的ID并在其内部使用div – toraan 2010-03-28 17:19:23

0

由于您的控制多次出现在同一页面上越多,你将不得不生成一个唯一的ID为你的用户控件的每个实例的div,然后如马特建议改变你的函数,以div ID作为参数。

考虑将您的div作为服务器控件运行(唯一ID将自动生成)。然后,您可以在用户控件的加载事件中访问唯一的客户端ID,并以编程方式将其传递给您的函数(通过为linkbutton设置'OnClientClick'属性)。即..

protected void Page_Load(object sender, EventArgs e) 
{ 

//get the unique generated ID  
string divID = yourDiv.ClientID; 

//pass it on to your function by setting OnClientClick 

yourLinkButton.OnClientClick = "ShowHideGotoPopUp('" + divID + ')"; 

} 
+0

div的ID不是自动生成的,它们都为用户控件的每个实例都获得相同的ID。 – toraan 2010-03-29 08:19:07

+0

林不知道我理解你。如果你运行你的div作为服务器控件,一个唯一的ID将由ASpnet自动生成。但你仍然可以像这样在页面加载时设置它 - > yourDiv.Attributes [“id”] = divid; – 2010-03-29 11:22:13