【问题标题】:Are hidden fields on child window inaccessible from parent window子窗口上的隐藏字段是否无法从父窗口访问
【发布时间】:2010-09-16 23:32:36
【问题描述】:
我有包含字段的 asp.net 表单。当我访问此窗口时,我的 javascript 函数可以使用 getElementById() 方法通过 DOM 访问字段,当我将 postpack 打包到服务器时,我会收到客户端所做的更新。
但是,当我使用 Telerik 的 RadWindow 控件将表单作为子窗口启动时,javascript 无法访问子表单上的隐藏字段。相反,我得到空值。
我的问题是:
- 是子窗口上的隐藏字段
窗口打开时无法访问
从父 asp.net 表单启动?
- 有没有人尝试过使用 Telerik 控件并遇到问题?
编辑
Craig 指出,id 可能不同。那么还有两个问题:
- 你能确保你在服务器上分配的id被实际使用了吗?
- 使用 getElementByName() 是访问 DOM 元素的更好机制吗?
【问题讨论】:
标签:
asp.net
javascript
telerik
【解决方案1】:
元素的 ID 很可能不是你想象的那样。检查呈现的页面并查看 ID 是否存在。我猜该页面被赋予了不同的 ID,因为它是在另一个控件中呈现的。
如果是这种情况,您可以通过访问控件客户端 ID 让表单呈现一些返回元素 ID 的脚本。
【解决方案2】:
要获取您的 asp.net 控件的 ID,请执行以下操作:
<%= theControl.ClientID %>
getElementByName 不如 getElementById 常用。 ID 属性应该对页面上的每个元素都是唯一的,而 name 属性可以重复。
【解决方案3】:
我将 getElementsByName 用于同一组内的复选框。
关于控件的 ID,TonyB 的想法是对的,但是请确保您在 PreRender 事件处理程序中引用 ClientID 属性,因为如果您在页面生命周期中过早地这样做,它将无法使用) .
【解决方案4】:
在 RadWindow 加载它之前,javascript 是否可能试图获取对隐藏字段的引用?我相信我之前遇到过这个问题,不得不使用 setTimeout 来解决这个问题。
【解决方案5】:
大卫,我给你发这个答案是因为我在我的代码中看到了同样的问题,而我发现的唯一真正的解决方案是我必须在两个地方支持“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 包的问题......