Javascript позволяет нам запускать программную логику на стороне клиента, то есть мы можем динамически изменять HTML-элементы на основе некоторой логики без перезагрузки страницы с новым вызовом сервера. Эта логика запускается событиями, которые запускаются из взаимодействия с пользователем. Обычный способ сделать это — добавить встроенные события Javascript , но я бы хотел искоренить это зло из Интернета.
<a href=”javascript:doStuff()”>Do Stuff</a>
<form onsubmit=”doStuff()”>
Оба примера являются распространенными способами включения сценариев клиент-сайт, которые имеют место, когда пользователи взаимодействуют со ссылками или кнопками. И у обоих способов есть лучшая альтернатива.
Во-первых, вот проблемы, которые у меня возникают с этим способом реализации Javascript, так что вы будете знать, почему я пытаюсь сделать это по-другому.
- Обслуживание: если вы изменяете имя функции или параметры, вам нужно будет обновлять каждый вызов этой функции. Что отстой, если у вас много кнопок.
- Модульность. Как и в случае с отдельным CSS, имеет смысл содержать как можно больше Javascript. Нет необходимости смешивать границы, смешивая HTML и Javascript.
- Доступность. Требуя, чтобы Javascript был частью действия, такого как
href
кнопка привязки, вы сделали невозможным работу с Javascript. Если оставить его в HTML-версии, он будет работать, если Javascript отключен. - Конфиденциальность: это может быть личным предпочтением. Но я не люблю передавать свои функции Javascript пользователю. Встроенный способ покажет, что происходит вызов Javascript в строке состояния. Конечно, если кто-то копает достаточно сильно, он узнает, но, по крайней мере, я не голый.
Добавление событий с помощью Mootools
Прежде всего, очень легко добавить прослушиватели событий в объекты DOM с помощью Mootools. Вы просто получаете доступ к элементу DOM и используете addEvent()
функцию. Вот как:
Лечение
$('button').addEvent('click',function(event){
event.stop();
alert("Doing stuff");
});
<a href="dostuff.html" id="button">Do Stuff</a>
Это получает DOM Элемент ID кнопки. Функция addEvent()
принимает 2 параметра, первый из которых относится к типу события, в этом случае щелчок , а второй — функция, выполняемая при прослушивании этого события.
Используя, event.stop()
мы предотвратили обычное действие, которое должно было бы загрузить dostuff.html (хорошо иметь доступность, поэтому в случае, если Javascript нет рядом, чтобы остановить событие, он переходит к dostuff.html).
.bind () и .each ()
Вот две дополнительные функции, которые очень полезно знать при добавлении прослушивателей событий в элементы.
Array.each ()
Во-первых, это .each()
делает чрезвычайно простым добавление этой широкой страницы. Давайте взглянем.
<a href="dostuff.html" class=”butto>Do Stuff</a>
$$(’.button’).each(function(stuffButton) {
stuffButton.addEvent(’click’,function(event){
event.stop();
alert(”Doing stuff”);
});
});
Здесь $$('.className')
мы использовали массив элементов DOM, все с классом кнопки . Затем, используя Array.each()
функцию Mootools , мы перебираем каждый объект в массиве и обращаемся к нему, используя передаваемый нами параметр, в данном случае stuffButton .
Function.bind ()
Также полезно, если вы используете addEvent()
функцию в классе и хотите вызвать другую функцию класса, вы обнаружите, this.classFunction()
что предали вас. Это потому, что addEvent()
это функция элемента, поэтому использование this
внутри этой функции будет думать, что оно относится к экземпляру этого элемента, а не к классу, на который вы надеялись.
Чтобы использовать this
ключевое слово обратно в свой контроль, вы будете использовать bind()
функцию.
$$('.button').each(function(stuffButton) {
stuffButton.addEvent('click',function(event){
event.stop();
this.doStuff();
}.bind(this));
});
Вы можете использовать любой объект в качестве параметра bind()
, делая этот объект доступным с this
.
События для Mootoolize
Вот небольшой список общих встроенных событий Javascript, которые вы можете прослушивать addEvent
. Просто уберите « вкл» и оставьте остальное слово.
- по щелчку
- onSubmit
- onMouseOver — Полезно редко. Обычно CSS-псевдо-класс
:hover
— это правильное использование. - onKeyPress — думаю. Если это не годный для использования встроенный, по крайней мере
keypress
, это событие, которое вы можете прослушать.