2008-10-13 75 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