|
![]() |
#1 |
Участник
|
Можно добавить событие onchange в HTML'ый контрол.
У меня была ситуация, когда надо было всем полям добавить событие на изменение значения в любом поле. Я рекурсивно обходил все элементы на форме и добавлял скрипт: X++: private void setControlAttributes(ControlCollection collection) { foreach (Control curControl in collection) { if (curControl.GetType() == typeof(DataControlFieldCell) || curControl.GetType() == typeof(TableCell)) { WebControl control; if (curControl.GetType() == typeof(DataControlFieldCell)) { control = (DataControlFieldCell)curControl; } else { control = (TableCell)curControl; } AttributeCollection attCollection = control.Attributes; attCollection.Add("onchange", "onClientChange();"); } if (curControl.Controls.Count != 0) { setControlAttributes(curControl.Controls); } } } PHP код:
![]() |
|
|
За это сообщение автора поблагодарили: trud (3), gl00mie (3). |
![]() |
#2 |
Участник
|
Цитата:
Сообщение от Dreadlock
![]() Можно добавить событие onchange в HTML'ый контрол.
Сам PostBack можно сделать так 1) перекрыть onload c тем, чтобы когда страница загрузилась, добавить событие на нужный элемент INPUT 2) для того, чтобы найти элемент, к которому надо добавить событие, я собирался использовать сначала getElementsByTagName, затем RegExp 3) почему-то не был уверен, что onchange сработает, собирался поэкспериментировать с разными событиями 4) затем - постбэк Но если основную часть можно написать в .NET, а не в JavaScript, мне этот вариант нравится гораздо больше. Я попробую и отпишу. Спасибо за пример кода! |
|
![]() |
#3 |
Участник
|
С методом getElementsByTagName есть один интересный момент, если у вас поле привязки данных, а скорее всего так оно и есть, то имя контрола будет ctl100...многоВсегоНеЧитабелного..._102 (как пример).
Зашивать такое имя в JavaScript не совсем корректно. Конечно можно попробовать в PageLoad генерить JavaScript и передавать в него этот ID или имя. Или поле привязки сделать шаблонным и присвоить ему нужный ID. Тогда можно и с getElementsByTagName работать не боясь, что что-то сломается (мысли в слух). Удачи ![]() |
|
![]() |
#4 |
Участник
|
Да, там имя типа ctl00$ctl00$m$g_fb191d40_6b28_4a75_9c9c_b1facd8fc1a3$ctl01$frmNameOfForm$grpNameOfGroup$ctl07
Но, как я понимаю, имя меняться не будет, так что если правильно идентифицировать элемент вначале, проблем быть не должно. Я с JavaScript не на ты, может и не учитываю что-то. У поля ввода даты AxCtrlType="AxDTD", а у поля ввода времени AxCtrlType="AxDTT", я также собирался использовать эту интформацию для нахождения нужного элемента. Если получится все сделать из .NET, во всем этом уже не будет необходимости. |
|
![]() |
#5 |
Участник
|
|
|
![]() |
#6 |
Участник
|
А откуда берется ControlCollection?
Или я чего-то не понимаю, или для аксаптовской формы этот метод все-таки не подходит. Мы имеем дело с объектами типа AxBoundField, а не Control или WebControl, и там нет свойства Attributes или, к примеру, ClientID и т.п. В итоге мне пока не ясно, как можно повесить событие onchange на произвольный аксаптовский веб-контрол. |
|
![]() |
#7 |
Участник
|
ControlCollection - коллекция контролов на странице, Page.Controls если не ошибаюсь.
Метод этот я скопировал, как я уже писал, и вставил в тему ![]() |
|
Теги |
ax2012, enterprise portal, utcdatetime |
|
|