Недоступны ли скрытые поля в дочернем окне из родительского окна

StackOverflow https://stackoverflow.com/questions/199127

  •  11-07-2019
  •  | 
  •  

Вопрос

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

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

Мои вопросы таковы:

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

Редактировать Крейг отметил, что идентификатор может отличаться.Тогда два дополнительных вопроса:

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

Решение

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

<%= theControl.ClientID %>

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

Другие советы

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

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

Дэвид, я отправляю тебе этот ответ, потому что я видел ту же проблему в своем коде, и единственное РЕАЛЬНОЕ решение, которое я нашел, заключалось в том, что мне пришлось поддерживать функцию "OnClick" в двух местах...В моем случае я использовал PetersDatePackage, но он был на полосе Telerik RAD.

В моем случае элемент управления находился на странице .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...

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top