Скрытые поля в дочернем окне недоступны из родительского окна - PullRequest
1 голос
/ 14 октября 2008

У меня есть форма asp.net, которая содержит поля. Когда я открываю это окно, мои функции javascript могут обращаться к полям через DOM с помощью метода getElementById (), а когда я отправляю сообщение на сервер, я получаю обновления, сделанные клиентом.

Однако, когда я запускаю форму как дочернее окно, используя элемент управления Radrikindow от Telerik, javascript не может получить доступ к скрытым полям дочерней формы. Вместо этого я получаю ноль.

Мои вопросы:

  1. скрыты поля в дочернем окне недоступен, когда окно запускается из родительской формы asp.net?
  2. Кто-нибудь пытался сделать это с помощью Telerik и столкнулся с проблемами?

EDIT Крейг указал, что идентификатор может быть другим. Два дополнительных вопроса:

  1. Можете ли вы убедиться, что идентификатор, который вы назначаете на сервере, действительно используется?
  2. Является ли использование getElementByName () лучшим механизмом для доступа к элементам DOM?

Ответы [ 5 ]

1 голос
/ 13 января 2009

Дэвид, я отправляю вам этот ответ, потому что я видел ту же проблему в своем коде, и единственное РЕАЛЬНОЕ решение, которое я нашел, было то, что я должен был поддерживать функцию 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 ...

1 голос
/ 14 октября 2008

Чтобы получить идентификатор вашего элемента управления asp.net, сделайте что-то вроде этого:

<%= theControl.ClientID %>

getElementByName используется не так часто, как getElementById. Атрибут ID должен быть уникальным для каждого элемента на странице, тогда как атрибут name может быть продублирован.

1 голос
/ 14 октября 2008

Вполне возможно, что идентификатор элемента не тот, который вы думаете. Проверьте отображаемую страницу и посмотрите, есть ли там идентификатор. Я предполагаю, что странице присвоен другой идентификатор, поскольку она отображается внутри другого элемента управления.

Если это так, вы можете сделать так, чтобы форма отображала некоторый скрипт, который возвращает идентификатор элемента, путем доступа к идентификатору клиента управления.

0 голосов
/ 17 октября 2008

Возможно ли, что javascript пытается получить ссылку на скрытое поле до того, как RadWindow его загрузит? Я думаю, что сталкивался с этим раньше и должен был использовать setTimeout, чтобы обойти проблему.

0 голосов
/ 15 октября 2008

Я использую getElementsByName для флажков внутри одной группы.

Что касается идентификатора элемента управления, то у TonyB правильная идея, но убедитесь, что вы ссылаетесь на свойство ClientID в обработчике событий PreRender, поскольку, если вы сделаете это слишком рано в жизненном цикле страницы, оно еще не будет доступно) .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...