2010-03-28 16 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