ОК, так что у меня есть пара, что может закончиться для этого форума чрезмерно начинающими вопросами, касающимися ненавязчивой обработки событий.
Насколько я понимаю, правильно настроенный документ будет выглядеть примерно так:
<html>
<head>
<title>Title</title>
<script src="jsfile.js" type="text/javascript></script>
</head>
<body>
//Body content, like some form elements in my case
</body>
</html>
Jsfile.js будет выглядеть примерно так:
function a() {
//code;
}
function b()...
window.addEventListener('load', a, false);
document.getElementById("id").addEventListener('click', b, false);
document.myForm.typeSel.addEventListener('change', c, false);
//or to use better browser-compatible code...
function addEvent(obj,evt,fn) {
if (obj.addEventListener)
obj.addEventListener(evt,fn,false);
else if (obj.attachEvent)
obj.attachEvent('on'+evt,fn);
}
addEvent(window, 'load', a);
addEvent(document.getElementById('id'), 'click', b);
addEvent(document.myForm.typeSel, 'change', c);
Насколько я понимаю, браузер загружает этот код javascript, добавляя каждый из этих обработчиков событий в соответствующие элементы. ОДНАКО ... Хотя обработчик window добавлен правильно, ни один из них не добавлен. Но если поместить в функцию, (например) метод getElementById для доступа к элементу работает просто отлично, и добавляется обработчик события. Таким образом, я мог бы создать функцию loadEvents (), которая вызывается через окно загрузки, которая содержит все функции addEvent () для других элементов документа, для которых мне нужны обработчики событий. Но, как я все понимаю, я не должен был этого делать.
Кроме того, если бы я вставил код addEvent в тело вместе с элементом, к которому он обращается, например ...
<input type="checkbox" id="test" />
<script type="text/javascript>
document.getElementById("test").onclick = func;
</script>
... тогда все работает нормально. Но, конечно, это также нарушает всю причину удаления встроенных обработчиков событий!
Итак, вопрос в том, чтобы использовать " element .addEventListener ('click', func, false)", "addEvent ( element , 'click', func)" или даже " element .onclick = func" - как я могу успешно ссылаться на элемент в конце файла сценария в голове, не вставляя его в другую функцию? Почему getElementById и другие подобные методы не работают вне функции в голове?
Или есть какой-то недостаток в моем глубоком понимании?