Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Эмуляция свойства onCheck для элементов radio & checkbox (https://javascript.ru/forum/events/26155-ehmulyaciya-svojjstva-oncheck-dlya-ehlementov-radio-checkbox.html)

Ghaniball 28.02.2012 11:42

Эмуляция события onCheck для элементов radio & checkbox
 
Предположим в моем скрипте есть следующая строка

document.getElementById("myRadioButton").checked = true

Какое в этом случае срабатывает событие, чтобы потом к этому событию прикрепить функцию?

Rootpassword 28.02.2012 11:52

Никакое.

Ghaniball 28.02.2012 12:12

Цитата:

Сообщение от Rootpassword
Никакое.

А какое нибудь неординарное решение возможно придумать?

dmitriymar 28.02.2012 12:50

Запустить обработчик события если он есть

Ghaniball 28.02.2012 13:30

Цитата:

Сообщение от dmitriymar
Запустить обработчик события если он есть

Его нет! По этому я и спросил про эмуляцию.:-?

Rootpassword 28.02.2012 13:45

Цитата:

Сообщение от Ghaniball (Сообщение 160389)
Его нет! По этому я и спросил про эмуляцию.:-?

Эмуляцию чего? Если вы хотите выполнить некие действия после
document.getElementById("myRadioButton").checked = true
то оформите их в виде функции и вызывайте их сразу после, передавая document.getElementById("myRadioButton") параметром функции, вот и все. Остальные варианты схожи.

dmitriymar 28.02.2012 13:46

Цитата:

Сообщение от Ghaniball
Его нет! По этому я и спросил про эмуляцию.

вы путаете слушатель события и обработчик события.
обработчик события -функция выполняемая при наступлении события.

dmitriymar 28.02.2012 13:52

Цитата:

Сообщение от Rootpassword
Эмуляцию чего? Если вы хотите выполнить некие действия после
document.getElementById("myRadioButton").checked = true
то оформите их в виде функции и вызывайте их сразу после, передавая document.getElementById("myRadioButton") параметром функции, вот и все. Остальные варианты схожи.

Не совсем так . вешается обработчик события на элемент это само собой. И при изменении параметров программно вызывается обработчик события для элемента-
элемент.событие.вызов функции обработчика

Rootpassword 28.02.2012 14:06

Цитата:

Сообщение от dmitriymar (Сообщение 160393)
Не совсем так . вешается обработчик события на элемент это само собой. И при изменении параметров программно вызывается обработчик события для элемента-
элемент.событие.вызов функции обработчика

Это уже личные предпочтения.
Идейно ваш вариант более правильный, но более сложный для понимания человеку, который js не особо. Я написал попроще вариант, но который хуже поддерживать.
Работать будут оба.

Ghaniball 28.02.2012 14:25

Цитата:

Сообщение от dmitriymar
вы путаете слушатель события и обработчик события.

Извините за неточность в начале, но я хочу понять происходит какое нибудь событие при этом присваивании
document.getElementById("myRadioButton").checked = true
Если "Да" - то какое? И какой у нее обработчик?
Если "Нет" - тогда как с помощью JS определить момент изменения атрибута и/или свойства "checked" и прикрепить какую то функцию?

Цитата:

Сообщение от Rootpassword
то оформите их в виде функции и вызывайте их сразу после

Не могу, случай не позволяет.

Rootpassword 28.02.2012 14:32

Событие происходит, грубо говоря, если пользователь тыкает мышкой в ваш чекбокс, изменяя его свойство checked на противоположное. Это событие onchange. или onclick можно.
Но если вы меняете js свойство checked вот так, как вы показали, никакого события не происходит. Понимаете?

Ghaniball 28.02.2012 14:42

Цитата:

Сообщение от Rootpassword
Понимаете?

Я понимаю. Я создал эту тему чтобы узнать нет ли других путей или возможностей.

T-sh 28.02.2012 14:47

onclick/onchange

хотя я встречал и вариант из проктологии, когда с интервалом в секунду отслеживали изменение значений атрибутов... но это уже для любителей БДСМ и фетишистов.

Kolyaj 28.02.2012 15:09

T-sh,
onclick/onchange не срабатывают при программном изменении свойства checked.

Цитата:

Сообщение от T-sh
хотя я встречал и вариант из проктологии, когда с интервалом в секунду отслеживали изменение значений атрибутов... но это уже для любителей БДСМ и фетишистов.

Без этого иногда тоже не обойтись.

T-sh 28.02.2012 15:16

Цитата:

Сообщение от Kolyaj (Сообщение 160413)
T-sh,
onclick/onchange не срабатывают при программном изменении свойства checked.


Без этого иногда тоже не обойтись.

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

Rootpassword 28.02.2012 15:18

Представим себе черный ящик...

Kolyaj 28.02.2012 15:54

T-sh,
реализация placeholder-а в форме логин/пароль. В качестве placeholder-а выступает label, позиционированный над input-ами. Если фокус или значение, то label нужно скрыть.
Теперь беда: если у пользователя сохранён пароль в браузере, то он автоматически подставляется в поле пароля без какого-либо события. По крайней мере так было минимум в одном браузере на тот момент, когда я это делал. А надпись надо скрыть при этом.

Ghaniball 28.02.2012 17:29

Выходит что невозможно прицепить обработчик к элементу если программно изменить свойство "checked"?

T-sh 28.02.2012 17:45

Цитата:

Сообщение от Kolyaj (Сообщение 160433)
T-sh,
реализация placeholder-а в форме логин/пароль. В качестве placeholder-а выступает label, позиционированный над input-ами. Если фокус или значение, то label нужно скрыть.
Теперь беда: если у пользователя сохранён пароль в браузере, то он автоматически подставляется в поле пароля без какого-либо события. По крайней мере так было минимум в одном браузере на тот момент, когда я это делал. А надпись надо скрыть при этом.

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

Kolyaj 28.02.2012 17:49

Если бы фокус устанавливался, проблемы бы не было.

Ghaniball 02.03.2012 18:30

Цитата:

Сообщение от Ghaniball
Выходит что невозможно прицепить обработчик к элементу если программно изменить свойство "checked"?

Слава Богу, и "моей настойчивости" я разобрался.

Спасибо всем за поддержку!

Рушение нашёл в событиях onPropertyChange в IE, а в Firefox DOMAttrModified.
Один минус - стандарта здесь нет никакого. Тут подробнее.


Часовой пояс GMT +3, время: 20:40.