Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   onpropertychange и oninput (https://javascript.ru/forum/misc/12757-onpropertychange-i-oninput.html)

mat_ppc 01.11.2010 21:23

onpropertychange и oninput
 
всем привет, кто знает как на onpropertychange и oninput программно повесить функции, у меня что-то не выходит...

Вот так я делал обычно, работает с onchange:
document.getElementById('test').onchange = function() {alert('test');}

а вот так вот, не работает... не могу понять почему и что зделать чтобы запахало...
document.getElementById('test').oninput = function() {alert('test');}

Выежнулcя через setAttribeute - кажется работает...
document.getElementById('test').setAttribute('oninput', "alert('test')");

но вот с onpropertychange IE отдаёт алёрт : 'Stack overflow at line: 0'

хелп!

mat_ppc 01.11.2010 23:35

Нашёл хороший пост, но проблема с 'Stack overflow at line: 0' осталась, сейчас на onchange в IE весит, но всё же я надеюсь на вашу помощь.

Цитата:

Сообщение от subzey (Сообщение 43340)
if (o.addEventListener){
			o.addEventListener('DOMControlValueChanged', updateSlider, false); // Presto
			o.addEventListener('input', updateSlider, false); // Gekko
			o.addEventListener('DOMCharacterDataModified', updateSlider, false); // WebKit
			o.addEventListener('change', updateSlider, false); // Graceful degradation
		} else if (o.attachEvent){
			o.attachEvent('onpropertychange', function(e){
				if(e.propertyName.toLowerCase() == "value"){
					updateSlider(e);
				};
			}); // Trident
			o.attachEvent('onchange', updateSlider); //Trident degradation
		};


o — объект, к которому нужно поставить обработчики, updateSlider — функция-обработчик. Прошу прощения за «неговорящие» имена, кусок выдран из проекта. :)


Kolyaj 01.11.2010 23:40

В функции updateSlider меняется свойство value у объекта, на который повешен обработчик onpropertychange?

mat_ppc 02.11.2010 17:58

Эток кусок кода для примера, у меня просто отрабатывает
o.attachEvent('onchange', updateSlider);

Видимо не так понял, что такое onpropertychange, искал аналог oninput в IE...

castor 09.12.2010 02:07

Kolyaj
А что насчет изменения value у объекта с onpropertychange?
Есть какие-то решения или описание проблемы?
"Ручное" изменение каких атрибутов вызывает такую же проблему?

Столкнулся с неправильной отработкой первого нажатия после установки value у текстового поля.

x-yuri 09.12.2010 07:15

Цитата:

Сообщение от castor
"Ручное" изменение каких атрибутов вызывает такую же проблему?

эту проблему вызывает бесконечная рекурсия

Kolyaj 09.12.2010 08:39

Цитата:

Сообщение от castor
А что насчет изменения value у объекта с onpropertychange?
Есть какие-то решения или описание проблемы?
"Ручное" изменение каких атрибутов вызывает такую же проблему?

А где там проблема? Я вижу только недопонимание. Проблемы не вижу.

castor 09.12.2010 13:20

Простейший пример

<form>
	<input name="a1" onpropertychange="this.form.a2.value = this.value;">
	<input name="a2">
	<input type="button" value="test" onclick="this.form.a1.value = 'new';">
</form>


Пока не изменяем "вручную" value, реакция на ввод норм, как только поменяли - первое нажатие не приводит к срабатыванию обработчика. То бишь и событие не запускается.

Цитата:

эту проблему вызывает бесконечная рекурсия
Не понял. Пояснить сию мысль можно?

Цитата:

Я вижу только недопонимание
Да вот и я тоже готов повторить эти слова:)

Kolyaj 09.12.2010 13:35

Теперь вижу проблему :)

Но это больше похоже на баг браузера.

x-yuri 09.12.2010 13:54

Цитата:

Сообщение от castor
Не понял. Пояснить сию мысль можно?

твоя проблема отличается от проблемы ТС


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