2008-10-13 88 views
1

我有包含字段的asp.net窗體。當我訪問這個窗口時,我的javascript函數可以通過getElementById()方法通過DOM訪問字段,當我將postpack到服務器時,我正在接收客戶端所做的更新。從父窗口無法訪問子窗口上的隱藏字段

但是,當我使用Telerik的RadWindow控件將窗體作爲子窗口啓動時,javascript無法訪問子窗體上的隱藏字段。相反,我得到空。

我的問題是:

一個子窗口上
  1. 現藏域 當從父asp.net的形式推出了窗口 無法訪問?
  2. 有沒有人嘗試這與Telerik控制和遇到問題?

編輯 克雷格指出,ID可能會有所不同。還有兩個額外的問題:

  1. 您能確保您在服務器上分配的ID實際上被使用嗎?
  2. 是否使用getElementByName()更好的機制來訪問DOM元素?

回答

1

爲了讓您的asp.net控件的ID,做這樣的事情:

<%= theControl.ClientID %> 

getElementByName是不常用的的getElementById。對於頁面上的每個元素,ID屬性應該是唯一的,而name屬性可以重複。

1

元素的ID很可能不是您認爲的元素。檢查呈現的頁面,看看ID是否在那裏。我猜測,頁面被賦予了一個不同的ID,因爲它在另一個控件中呈現。

如果是這種情況,可以通過訪問控件客戶端ID來讓表單呈現一些通過返回元素ID的腳本。

+0

感謝您的回答 - 我要檢查一下。 – 2008-10-13 22:57:09

0

我使用getElementsByName作爲同一組內的複選框。

至於控件的ID,TonyB有正確的想法,但要確保你引用PreRender事件處理程序中的ClientID屬性,因爲如果你在頁面生命週期中做得太早,它將不可用)。

0

是否有可能是JavaScript試圖在RadWindow加載之前獲取對隱藏字段的引用?我相信我之前遇到過這個問題,不得不使用setTimeout來解決這個問題。

1

David,我向你發送這個答案是因爲我在我的代碼中看到了同樣的問題,唯一真正的解決方案是我必須在兩個地方支持「OnClick」函數...在我的情況下,我正在使用PetersDatePackage,但它在Telerik RAD Strip上。

在我的情況下,控制是的.ascx頁面上,和JS代碼如下:

function OnIncidentDateChange(ctrl, dtDate, bErr) 
{ 
    var weekday = new Array(7); 
    weekday[0] = "Sunday"; 
    weekday[1] = "Monday"; 
    weekday[2] = "Tuesday"; 
    weekday[3] = "Wednesday"; 
    weekday[4] = "Thursday"; 
    weekday[5] = "Friday"; 
    weekday[6] = "Saturday"; 

    <%=LabelDayOfWeek.ClientID %>.innerText = weekday[dtDate.getDay()]; 
} 

但是,這本身是不夠的。我不得不將這個代碼添加到我的父頁面。包含Telerik條的控件的頁面。

// Dummy function? 
function OnIncidentDateChange() 
{ 
} 

一旦我做到了,它的工作...

我不能確定爲什麼,說實話,這是沒有意義的我,可能只是同一個問題PDP封裝...

+0

謝謝拉里 - 我很感激! – 2009-01-14 12:50:30