Обнаружить в 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
По сути, все уже построено и представлено на отдельных панелях, но вы можете включать и выключать отображение разделов вопросов в зависимости от условий.
Это помогает?