2012-01-24 16 views
1

我需要編寫一個從Master頁面運行的Javascript函數,以便在contenct頁面中找到一個ModalPopup並關閉它。下面的代碼工作,但不是我想要的。我需要使用像mpeEditUser.ClientID這樣的東西,但是我得到了一個錯誤。另外,如果我可以通過它的類型(ModalPopupExtender)找到一個ModalPopup而不知道它的id,那將會很好。任何建議?如何在JavaScript中找到ModalPopupExtender?

function CloseModalPopup() { 
     var mpu = $find('ctl00_ContentPlaceHolder1_mpeEditUser'); 
     mpu.hide(); 

    } 

這裏是我的解決方案:(如果你看到任何問題,請讓我知道,謝謝!) 我得到的代碼隱藏的ModalPopup ID,並將它傳遞給我的javascript功能。

在default.master.cs的Page_Load中:

ContentPlaceHolder cph = (ContentPlaceHolder)FindControl("ContentPlaceHolder1"); 
string sMpeID = (AjaxControlToolkit.ModalPopupExtender)cph.FindControl("mpeEditUser"); 

在我的JavaScript函數:

var mpe = $find('<%=sMpeID%>'); 
if (mpe != null) { 
      mpe.hide(); 
} 
+0

「* ...但我得到一個錯誤。*」 - 有多有趣。謹慎分享錯誤是什麼? =) – jadarnel27

+0

對不起。我更新了我的問題。基本上我得到了錯誤的CS0103:名稱'mpeEditUser'在當前上下文中不存在。 – GLP

回答

0

它可能是標籤得到通過另一頁被稱爲打亂了,這發生在我身上。我不知道最適合你的解決方法,但是我解決這個問題的方法是首先通過一個javascript函數來查找mpe,該函數查找頁面上所有元素的模糊匹配。

var elemets = document.getElementsByTagName("*"); 
var mpe; 
for (var i = 0; i < elemets.length; i++) { 
    var id = elemets[i].id 
    if (id.indexOf("mpe") >= 0) { 
     mpe = elemets[i]; 
    } 
} 

如果你在頁面上有多個mpe,你可能想匹配更多的字符串。對於我來說,元素函數只返回了大約50個元素,所以它沒有太多的開銷。這可能不適合您,但即使您不在最終產品中使用此功能,它也可以幫助您發現實體的實際ID。