Обнаружить в javascript существование Ajax CalendarExtender

У меня есть форма, части которой необходимо динамически клонировать через JavaScript, чтобы пользователи могли вводить дополнительные сведения. Все работает нормально, кроме случаев, когда к одному из клонированных текстовых полей прикреплен CalendarExtender для выбора даты. Текстовое поле клонировано, но расширитель календаря - нет, так как он, очевидно, не существует как элемент в DOM, и события не прикрепляются непосредственно к клонируемому текстовому полю.

Итак, что я ищу, так это способ определения, предпочтительно путем проверки какого-либо атрибута самого текстового поля, если есть прикрепленный расширитель календаря. Или, если есть какой-то способ проверить коллекцию экстендеров для идентификатора текстового поля и т. Д. Тогда я мог бы добавить новое поведение в клонированное текстовое поле.

Любые советы о том, где найти эти данные будут оценены. Благодарю.


Обновление, примеры

Это asp.net ajax calendarExtender, который я использую, на странице есть живые примеры его использования. (Полагаю, вы также можете скачать инструментарий с сайта.)

http://www.asp.net/AjaxLibrary/AjaxControlToolkitSampleSite/Calendar/Calendar.aspx

Я приведу здесь упрощенную версию кода, который я использую (вырежьте все на странице, кроме элементов управления).


На странице ASP.Net у меня есть таблица, содержащая текстовое поле с приложенным расширителем календаря. Как вы можете видеть здесь, это свойство расширителя календаря, которое ссылается на текстовое поле, поэтому текстовое поле не имеет специальных свойств на стороне сервера.

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" Runat="Server">
  <table>
    <tr>
      <td>
        <asp:TextBox ID="txtDateFrom" runat="server" />
        <ajx:CalendarExtender ID="calFrom" runat="server" TargetControlID="txtDateFrom" Format="dd/MM/yyyy" />
      </td>
    </tr>
  </table>
</asp:Content>

Предоставленный клиентский HTML-код выглядит следующим образом. Как вы видите, в таблице нет ничего, что указывало бы на наличие расширителя календаря, оно существует только как сценарий, сгенерированный как самая последняя вещь на странице.

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
  <head>...</head>
  <body>
    <form method="post" action="Default.aspx" id="ctl101">
      <table>
        <tr>
          <td>
            <input name="ctl00$MainContent$txtDateFrom" type="text" id="txtDateFrom">
          </td>
        </tr>
      </table>
      ...
      <script type="text/javascript">
        //<![CDATA[
        Sys.Application.add_init(function() {
          $create(Sys.Extended.UI.CalendarBehavior, {"format":"dd/MM/yyyy","id":"calFrom"}, null, null, $get("txtDateFrom"));
        });
        //]]>
      </script>
    </form>
  </body>
</html>

JavaScript, используемый для клонирования строки таблицы, выглядит следующим образом:

function addRow(tr) {
  var cl = tr.cloneNode(true);
  cl.style.display = "table-row";
  for (var i = 0; i < cl.cells.length; i++)
    if (cl.cells[i].firstChild) {
      cl.cells[i].firstChild.value = ""; // reset inputs
      if (cl.cells[i].firstChild.id.match(/date/i)) // check & add calendar extender
        $create(Sys.Extended.UI.CalendarBehavior, { "format": "dd/MM/yyyy", "id": "cal"+tr.rowIndex }, null, null, cl.cells[i].firstChild);
    }
  tr.parentNode.insertBefore(cl, tr.nextSibling);
}

1 ответ

Возможно, вы можете атаковать проблему по-другому, позвольте мне объяснить.

$$ Panel 1 $$
First Name = Tom
Last Name = Miller
Menu Item = Pizza
Drink = Yes

$$ Panel 2 $$ (if Menu Item == Pizza Panel.Display = True)
Topping = Onion

$$ Panel 3 $$ (if Drink == Yes Panel.Display = True)
Drink = Soda

По сути, все уже построено и представлено на отдельных панелях, но вы можете включать и выключать отображение разделов вопросов в зависимости от условий.

Это помогает?

Другие вопросы по тегам