Донецкий техникум промышленной автоматики

Розбираємо способи виклику події onclick в javascript на прикладах

  1. Виносимо код події onclick в javascript-функцію
  2. Вішаємо onclick на елемент з javascript-коду
  3. застосовуємо jQuery

Таке просте подія, як onclick в javascript, може бути викликано декількома способами і скриает деякі тонкощі. Подія відбувається при кліці по елементу лівою кнопкою миші. Варто зауважити, що при кліці відбувається так само ще дві події, а саме натискання на кнопку миші і її віджимання.

Всі приклади будемо розглядати на тезі «a» (посилання). Нехай це не бентежить, з іншими тегами буде працювати аналогічним чином.

Найпростіший спосіб повісити подія onclick, це прописати його безпосередньо в html тезі:

<a href="#" onclick="alert('Прімер 1 сработал'); return false;"> Приклад 1 </a>

Код в дії:

У прикладі при натисканні на посилання з'являється спливаюче вікно з повідомленням. Додатково до дії ми прописали «return false;". Це потрібно щоб запобігти переходу за посиланням після спрацьовування події «onclick». В інших елементах (де немає аттрибута href) це можна опустити.

Розглянутий варіант можна використовувати якщо подія містить мало коду. Інакше, слід звернути увагу на інші способи.

Виносимо код події onclick в javascript-функцію

Наступний спосіб хороший тим, що ми відокремлюємо javascript-код від html тегів. У тезі прописуємо назву функції, а саму функцію виносимо в окремий блок:

<Script> function ChangeColor (Element) {if (Element.style.color == 'green') Element.style.color = 'red'; else Element.style.color = 'green'; return false; } </ Script> <a href = "#" style = "color: green;" onclick = "return ChangeColor (this);"> Змінити колір </a>

Код в дії:

Але і тут все не ідеально. Що робити, якщо подія потрібно повісити на все ссиликі сайту, а їх сотні? Здається що це важко, а на ділі - менше десяти рядків коду. Завдання вирішується за допомогою селекторів. У прикладі знову будемо проводити дії з тегом «a», але нічого не заважає використовувати замість посилання «img» або «div».

Вішаємо onclick на елемент з javascript-коду

Рассмот ще один спосіб, на мій погляд, самий практичний і надійний. Хороший він тим, що подія можна повісити на безліч елементів. Для цього потрібно вибрати за допомогою javascript-селектор елементи, до яких потрібно застосувати подія onclick.

<Script> // чекаємо повного завантаження сторінки window.onload = function () {// отримуємо ідентифікатор елемента var a = document.getElementById ( 'switch'); // вішаємо на нього подія a.onclick = function () {// виробляємо якісь дії if (this.innerHTML == 'On') this.innerHTML = 'Off'; else this.innerHTML = 'On'; // запобігаємо перехід по посиланню href return false; }} </ Script> <a id="switch" href="#"> On </a>

Код в дії:

Натисніть на посилання: On

Вибору елементів по селекторам можна присвятити окрему тему, можу сказати тільки те, що відповідно до нової специфікації HTML5, їх вибір став простий і в javascript. Якщо Ви знайомі з jquery або CSS, то вибрати потрібні елементи для Вас не складе труднощів. Наприклад, так просто можна вибрати всі елементи з класом «link» і повісити на них потрібну дію:

// вибираємо потрібні елементи var a = document.querySelectorAll ( '. Link'); // перебираємо всі знайдені елементи і вішаємо на них події [] .forEach.call (a, function (el) {// вішаємо подія el.click = function (e) {// виробляємо дії}});

застосовуємо jQuery

Якщо в проекті використовується бібліотека jQuery, то можна ще спростити код. Розглянемо два найпоширеніші способи:

$ (Function () {$ ( ". Link"). Click (function () {// дії});});

І ще один варіант, який ідентичний попередньому.

$ (Function () {$ ( ". Link"). On ( "click", function () {// дії});});

З оброблювачем «on ()» краще ознайомитися окремо, так як він несе в собі багато корисного функціоналу. Наприклад, можливість вказати через пропуск кілька подій до якої застосовуватиметься дію, делегувати події на дочірні елементи, а так само він корисний якщо необхідно повісити подія на динамічно додаються елементи, яких спочатку немає на сторінці.

Що робити, якщо подія потрібно повісити на все ссиликі сайту, а їх сотні?