• Новые сообщения · Участники · Правила форума · Поиск · RSS
    • Страница 1 из 1
    • 1
    Модератор форума: STALKER  
    Форум » О веб-дизайне » JavaScript » Пользовательские события в JavaScript
    Пользовательские события в JavaScript
    STALKERДата: Суббота, 17.12.2011, 20:03 | Сообщение # 1
    Генералиссимус
    Группа: Администраторы
    Сообщений: 139
    Статус: :-(
    Создаем пользовательские события в JavaScript


    По идее, все, кого может заинтересовать эта статья уже знакомы с событиями в JavaScript, но для полноты, я все же повторюсь. Само слово «события», как не странно, четко передает смысл этой особенности языка. События в JavaScript генерируются при определенных действиях со стороны пользователя. К примеру: клик мышкой на определенный элемент, наведение курсора на элемент, нажатие клавиши, завершение загрузки определенного элемента, завершение отправки запроса и т.д.

    Так вот, на днях, расширяя возможности одного моего скриптика, выполняющего функции сортировки Drag'n'Drop, мне понадобилось каким-то образом, при необходимости, добавлять определенные действия при завершении перетаскивания (к примеру отправку запроса на сервер, который собственно сообщит об изменении порядка элементов). Конечно, я мог бы отредактировать этот скрипт, просто добавив в него дополнительный функционал, но беда в том, что этот скрипт я использую и на другой странице, где такой функционал не нужен. Вот тут меня и осенило, ведь завершение перетаскивания — это событие, на которое можно вешать функцию, расширяя при этом функционал основной функции. JavaScript не дает возможности создавать пользовательские события, но это можно сделать, с помощью функции. Как ни странно, в интернете на эту тему разговоры ведутся, но готовое решение мне на глаза не попалось (не считая решений с встроенной функцией пользовательских событий в jQuery). В итоге я решил написать такую функцию сам и, соответственно, решил поделится с вами. Быть может еще кто-то не додумывался до такого:

    Code
    /***********************   
       * Создание пользовательских событий   
       ***********************/   
       var ev = {   
           evArr: new Array(),   
           cast: function (eName) {   
             for (var fName in this.evArr[eName]) {   
               this.evArr[eName][fName](arguments);   
             }   
           },   
           attach: function (eName, func, fName) {   
             if (typeof this.evArr[eName]  != 'object') {   
               this.evArr[eName] = new Array();   
             }   
             this.evArr[eName][fName] = func;   
           },   
           detach: function (eName, fName) {   
             delete this.evArr[eName][fName];   
           }   
       };


    Использовать обьект очень просто. Для этого вам нужно в интересующей вас функции добавить строчку:

    Code
    ev.cast('любое название события'[, переменная_1, переменная_2, …, переменная_n)


    Все переменные, переданные в этот метод будут доступны в вызываемых функциях, в виде массива в качестве первого аргумента. Причем нулевой элемент массива будет равен названию события.

    Что бы повесить функцию на обработчик события, достаточно вызвать следующий метод:

    Code
    ev.attach('название_события', функция, 'идентификатор_функции');


    идентификатор_функции — этот идентификатор нужен для того, что бы потом можно было, при желании снять функцию с обработчика.

    Что бы удалить функцию с обработчика события, используйте метод:

    Code
    ev.detach('название_события', 'идентификатор_функции');


    С этим методом, думаю, никаких дополнительных разьяснений не требуется.

    Источник


     
    Форум » О веб-дизайне » JavaScript » Пользовательские события в JavaScript
    • Страница 1 из 1
    • 1
    Поиск: