Как стать автором
Обновить

Комментарии 6

Как то не очень понятно, чего не хватило в обычных кастомных событиях jQuery с использованием неймспейсов.

Чем

behavior('.btn1, .btn2').on('mousedown mouseup', handler);


Лучше чем
$('.btn1, .btn2').on('mousdown.myns mouseup.myns', handler);


Гораздо удобнее навешивать события на корневой элемент вашего виджета, тогда и плагина не надо:

var $root = $(domSelector)

$root.on('mousedown.ns mouseup.ns', '.btn', function (e) {

})

$root.on('.ns', myLog)  // включить лог

$root.off('.ns', myLog)  // выключить лог

$root.off('.ns)  // выключить все обработчики

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

А если вам потребуется «заглушить» выполнение события, то внутри обработчика вам нужно ставить условие, еще потребуется внешний флаг, глядя на который обработчик будет понимать, выполняться ему, или нет.

А если у вас 2 состояния, как например, при перетаскивании — состояние ожидания и состояние перетаскивания, то у вас встает уже вопрос с управлением событий этих двух состояний. Опять нужно будет делать внешние флаги, по которым обработчики будут понимать, должны они выполняться, или нет.

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

Просто в моем проекте очень много событий, и состояний, при которых часть событий выполняется, а часть — нет. И есть необходимость в простом отключении всех событий разом. А так же в простом механизме приостановления всех событий на какое то время.

Кстати, в вашем примере "$root.on('.ns', myLog)" работать не будет, поскольку неймспейс указан, а событие нет. Отключать события по неймспейсу можно, а слушать нельзя.
Странно, но у меня демо в яндекс браузере не работает… — jsfiddle.net/fm22ptxv/
В консоли ошибки:
1) Refused to execute script from 'https://raw.githubusercontent.com/grimalschi/jquery-behavior/master/jquery.behavior.js' because its MIME type ('text/plain') is not executable, and strict MIME type checking is enabled. fiddle.jshell.net/:1

2) Uncaught TypeError: undefined is not a function (index):32
С github нельзя просто так тянуть js'ки. Вот так можно: rawgit.com
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории