父窗口中无法访问子窗口上的隐藏字段

时间:2008-10-13 21:41:56

标签: asp.net javascript telerik

我有包含字段的asp.net表单。当我访问此窗口时,我的javascript函数可以使用getElementById()方法通过DOM访问字段,当我将postpack发送到服务器时,我收到客户端所做的更新。

但是,当我使用Telerik的RadWindow控件将窗体作为子窗口启动时,javascript无法访问子窗体上的隐藏字段。相反,我得到了空。

我的问题是:

  1. 子窗口上隐藏的字段 窗口不可访问 从父asp.net表单启动?
  2. 是否有人使用Telerik控件尝试此操作并遇到问题?
  3. 修改 克雷格指出,身份证可能会有所不同。还有两个问题:

    1. 您能确保实际使用您在服务器上分配的ID吗?
    2. 使用getElementByName()是一种更好的机制来访问DOM元素吗?

5 个答案:

答案 0 :(得分:1)

元素的ID很可能不是你想象的那样。检查呈现的页面,看看ID是否存在。我猜这个页面被赋予了不同的ID,因为它是在另一个控件中呈现的。

如果是这种情况,您可以让表单呈现一些脚本,通过访问控件客户端ID来返回元素ID。

答案 1 :(得分:1)

要获取asp.net控件的ID,请执行以下操作:

<%= theControl.ClientID %>

getElementByName不像getElementById那样常用。对于页面上的每个元素,ID属性应该是唯一的,而name属性可以是重复的。

答案 2 :(得分:1)

大卫,我发给你这个答案是因为我在我的代码中看到了同样的问题,我找到的唯一真正的解决方案是我必须在两个地方支持“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包的问题...

答案 3 :(得分:0)

我对同一组中的复选框使用getElementsByName。

至于控件的ID,TonyB有正确的想法,但请确保您在PreRender事件处理程序中引用ClientID属性,因为如果您在页面生命周期中过早地执行它,它将无法使用)

答案 4 :(得分:0)

在RadWindow加载之前,javascript是否有可能尝试获取对隐藏字段的引用?我相信我之前遇到过这种情况,不得不使用setTimeout来解决这个问题。