1

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

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

我的问题是:

  1. 从父 asp.net 窗体启动窗口时,子窗口上的隐藏字段是否不可访问?
  2. 有没有人尝试过使用 Telerik 控件并遇到问题?

编辑 克雷格指出,id 可能不同。那么另外两个问题:

  1. 你能确保你在服务器上分配的 id 被实际使用了吗?
  2. 使用 getElementByName() 是访问 DOM 元素的更好机制吗?
4

5 回答 5

1

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

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

于 2008-10-13T22:10:51.260 回答
1

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

<%= theControl.ClientID %>

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

于 2008-10-14T00:12:12.670 回答
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 包的问题......

于 2009-01-13T20:40:45.073 回答
0

我将 getElementsByName 用于同一组中的复选框。

至于控件的 ID,TonyB 有正确的想法,但请确保您在 PreRender 事件处理程序中引用 ClientID 属性,因为如果您在页面生命周期中过早地这样做,它还不会可用)。

于 2008-10-14T20:52:32.773 回答
0

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

于 2008-10-16T20:56:32.283 回答