Значения свойств_обработчиков событий представляют собой функции, следова_ тельно, их можно непосредственно вызывать при помощи JavaScript_кода. На_ пример, пусть для определения функции проверки формы мы задали атрибут on_ submit тега <form> и хотим проверить форму в какой_то момент до попытки пере_ дачи ее пользователем. Тогда мы можем обратиться к свойству onsubmit объекта Form для вызова функции_обработчика события. Код может выглядеть следую_ щим образом:
document.myform.onsubmit();
Однако обратите внимание, что вызов обработчика события не является спосо_ бом имитации действий, происходящих при реальном возникновении этого со_ бытия. Если, например, мы вызовем метод onclick объекта Link, это не заставит броузер перейти по ссылке и загрузить новый документ. Мы лишь выполним ту функцию, которую определили в качестве значения этого свойства. (Чтобы за_ ставить броузер загрузить новый документ, необходимо установить свойство lo_ cation объекта Window, как это было продемонстрировано в главе 14.) То же самое справедливо и для метода onsubmit объекта Form, и для метода onclick объекта Sub_ mit: вызов метода запускает функцию_обработчик события, но не приводит к пе_ редаче данных формы. (Чтобы на самом деле передать данные формы, следует вызвать метод submit() объекта Form.)
Одна из причин, по которой может потребоваться явный вызов функции_обра_ ботчика события, – это желание дополнить с помощью JavaScript_кода обработ_ чик события, который (возможно) уже определен HTML_кодом. Предположим, вы хотите предпринять специальные действия, когда пользователь щелкает на кнопке, но не хотите нарушать работу какого_либо из обработчиков события on_ click, которые могут быть определены в самом HTML_документе. (Это один из недостатков кода в примере 17.1 – добавляя обработчик к каждой гиперссылке, вы переопределяете все обработчики события onclick, уже определенные для этих гиперссылок.) Этот результат достигается с помощью следующего кода:
var
b = document.myform.mybutton; //
Это интересующая нас кнопка
var
oldHandler = b.onclick;
//
Сохраняем HTML_обработчик события
function newHandler() { /* Здесь расположен мой код обработки события */ }
// Теперь назначаем новый обработчик события, вызывающий как новый,