Инициировать onclick быстрее, чем с document.onload - PullRequest
3 голосов
/ 20 июля 2009

У меня есть html-страницы со ссылками, где я хочу прикрепить функцию к их событию onclick. Один из способов сделать это, конечно:

<a href="save.php" onclick="save(); return false;" rel="save">Save</a>

Но я знаю, что это не лучшая практика. Поэтому вместо этого я жду window.onload, перебираю ссылки и присоединяю функцию сохранения к ссылкам с помощью rel = "save". Проблема в том, что он ждет, пока вся страница не загрузится, что может занять несколько секунд после того, как ссылка отобразится и будет нажата.

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

Ответы [ 6 ]

3 голосов
/ 20 июля 2009

Internet Explorer имеет удобный атрибут для тегов, называемых defer . Это для задержки разбора скрипта до завершения загрузки документа. Для других браузеров, которые его поддерживают, вы можете использовать DOMContentLoaded, как предлагал кто-то другой, и для браузеров, которые не поддерживают ни один, вы можете использовать onload.

<script type="text/javascript" defer>
//- Run this code when the DOM parsing has completed
</script>

Я сделал быстрый поиск в Google по запросу "DOMContentLoaded defer" и нашел следующую страницу, которая может помочь:

http://tanny.ica.com/ica/tko/tkoblog.nsf/dx/domcontentloaded-event-for-browsers

1 голос
/ 20 июля 2009

В вашем случае вы можете просто оставить все как есть. Придерживайтесь самой простой вещи, даже если это не является общей практикой.

1 голос
/ 20 июля 2009

Вы можете попробовать DOMContentLoaded событие вместо load. IE также предоставляет вам атрибут defer для тегов скрипта, который откладывает выполнение до загрузки DOM. Если это не работает для вас, то, насколько я знаю, вы застряли с упомянутыми решениями.

0 голосов
/ 20 июля 2009

Идеальным вариантом здесь было бы использовать идеи ненавязчивого Javascript.

Таким образом, если Javascript не загружен, ссылка все равно будет что-то делать. Это правильная ссылка, поэтому она ведет пользователя к другой части контента? - это должно работать без Javascript. И если функциональность, прикрепленная к ссылкам, может работать ТОЛЬКО * с Javascript, вы должны создать и вставить их в DOM с помощью Javascript (они не активируются, если их там нет .. .).

(Иначе как насчет делегирования события click элементу-обёртке? Работает ли это до завершения элемента?)

edit: О, и «сохранить» звучит очень похоже на то, что это должна быть кнопка в форме, а не ссылка. Ненавязчивый материал JS все еще применяется, хотя.

0 голосов
/ 20 июля 2009

Как насчет этого?

<a href="javascript:void(save());">Save</a>

Примечание. Для этого решения пользователям необходимо включить Javascript. Не совсем лучшая практика, но может подойти для вашего сценария.

0 голосов
/ 20 июля 2009

Я не знаю, подходит ли это для вашего решения, но вы можете вставить скрипт сразу под ссылками, которые вам нужно изменить. Этот сценарий не будет заключен в функцию, позволяющую браузеру сразу же выполнить его при просмотре. В результате вы можете запустить скрипт до загрузки полной страницы, изменяя только те элементы, которые существуют над скриптом, который вы запускаете. (Если вы ссылаетесь на что-то ниже сценария, это не удастся.)

Кстати, это почти наверняка не лучшая практика, и некоторые, вероятно, назвали бы это худшей практикой.

...