Комментарии 6
Как то не очень понятно, чего не хватило в обычных кастомных событиях jQuery с использованием неймспейсов.
Чем
Лучше чем
Чем
behavior('.btn1, .btn2').on('mousedown mouseup', handler);
Лучше чем
$('.btn1, .btn2').on('mousdown.myns mouseup.myns', handler);
+3
Гораздо удобнее навешивать события на корневой элемент вашего виджета, тогда и плагина не надо:
var $root = $(domSelector)
$root.on('mousedown.ns mouseup.ns', '.btn', function (e) {
})
$root.on('.ns', myLog) // включить лог
$root.off('.ns', myLog) // выключить лог
$root.off('.ns) // выключить все обработчики
+1
Вся прелесть в том, чтобы не заботиться о неймспейсах, о том, что все события нужно вешать на один корневой элемент, а потом, когда нужно все отключить — перечислять все элементы с событиями.
А если вам потребуется «заглушить» выполнение события, то внутри обработчика вам нужно ставить условие, еще потребуется внешний флаг, глядя на который обработчик будет понимать, выполняться ему, или нет.
А если у вас 2 состояния, как например, при перетаскивании — состояние ожидания и состояние перетаскивания, то у вас встает уже вопрос с управлением событий этих двух состояний. Опять нужно будет делать внешние флаги, по которым обработчики будут понимать, должны они выполняться, или нет.
Исходя из всех этих мелочей, и многих других, было решено писать плагин, который бы облегчил всю эту рутину.
Просто в моем проекте очень много событий, и состояний, при которых часть событий выполняется, а часть — нет. И есть необходимость в простом отключении всех событий разом. А так же в простом механизме приостановления всех событий на какое то время.
Кстати, в вашем примере "$root.on('.ns', myLog)" работать не будет, поскольку неймспейс указан, а событие нет. Отключать события по неймспейсу можно, а слушать нельзя.
А если вам потребуется «заглушить» выполнение события, то внутри обработчика вам нужно ставить условие, еще потребуется внешний флаг, глядя на который обработчик будет понимать, выполняться ему, или нет.
А если у вас 2 состояния, как например, при перетаскивании — состояние ожидания и состояние перетаскивания, то у вас встает уже вопрос с управлением событий этих двух состояний. Опять нужно будет делать внешние флаги, по которым обработчики будут понимать, должны они выполняться, или нет.
Исходя из всех этих мелочей, и многих других, было решено писать плагин, который бы облегчил всю эту рутину.
Просто в моем проекте очень много событий, и состояний, при которых часть событий выполняется, а часть — нет. И есть необходимость в простом отключении всех событий разом. А так же в простом механизме приостановления всех событий на какое то время.
Кстати, в вашем примере "$root.on('.ns', myLog)" работать не будет, поскольку неймспейс указан, а событие нет. Отключать события по неймспейсу можно, а слушать нельзя.
+2
Странно, но у меня демо в яндекс браузере не работает… — 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
В консоли ошибки:
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
+1
С github нельзя просто так тянуть js'ки. Вот так можно: rawgit.com
+2
Исправил, новая ссылка: jsfiddle.net/fm22ptxv/9/
0
Зарегистрируйтесь на Хабре , чтобы оставить комментарий
Гибкое управление событиями в jQuery — плагин jquery-behavior