2010-05-16 2 views
0

У меня есть скрытое поле формы, и когда кнопка нажата, значение скрытого поля изменяется. Теперь я добавил наблюдателя в скрытое поле, слушая изменения. По какой-то причине, однако, прослушиватель событий никогда не срабатывает, хотя значение скрытого элемента меняется. Я использую Prototype и Firefox 3.6.Программируемое манипулирование значением элемента DOM не срабатывает onchange event

Код выглядит примерно так:

button.observe('click', function(event) { 
    hiddenField.setValue(someValue); 
}); 

hiddenField.observe('change', function(event) { 
    alert('It works!'); 
}); 

Кто-нибудь есть ключ, почему последний наблюдатель не выполняет?

Спасибо!

ответ

1

Вам нужно event.simulate.js

сгореть случай ..

button.observe('click', function(event) { 
    hiddenField.setValue(someValue); 
    hiddenField.simulate('change'); 
}); 

А потом наблюдать его:

hiddenField.observe('change', function(event) { 
    alert('It works!'); 
}); 
+0

Я должен ударить себя, чтобы не думать об этом. Большое спасибо Дэвиду. Поскольку я уже использовал Prototype, я просто использовал hiddenField.fire («custom: change»), и все это работает как шарм :) –

+0

Да, если увольнять не-родные события с вами, вы можете просто запускать пользовательские события с именами как вы показали :) –

0

Я не думаю, что input элементы, которые скрыты, реагируют на это событие.

Я не знаю прототипа, но я думаю, что срабатывающие события полностью зависят от браузера.

Вот пример с jQuery на JSbin. Обратите внимание, что изменение текста самостоятельно запускает событие, однако следующая часть кода, которая изменяет значение через скрипт, не запускает его.

+0

Спасибо Алекс. Я попытался изменить элемент в поле обычного текстового типа, просто чтобы убедиться, что это был скрытый тип, который сделал это, но результат был тот же. Глупо, правда. Тем не менее, стрельба по специальному мероприятию сделала трюк. –