2013-06-20 2 views
4

Как относительный noob для javascript и jQuery, мне было любопытно, если неправильно прикреплять 2 обработчика кликов к одному элементу? Я знаю, что могу это сделать, но я просто любопытно, если это нарушение «лучших практик»Можно ли подключить два обработчика кликов к одному элементу?

Пример HTML:

<ul> 
    <li id="all" class="click_listener"> All Items </li> 
    <li id="item1" class="click_listener"> Item 1 </li> 
    <li id="item2" class="click_listener"> Item 2 </li> 
    <li id="item3" class="click_listener"> Item 3 </li> 
</ul> 

Пример JQuery (в документе готов):

$(".click_listener").click(
    function() { 
     var productCode = $(this).id; 
     filter(productCode); 
    } 
); 

$("#all").click(
    function() { 
     closeMenu(); 
    } 
); 

Другие функции JQuery:

function filter(productCode) { 
    // Displays selected product, or if 'all' was passed in, displays all products. 
} 

function closeMenu() { 
    // Closes the menu by slideUp-ing the parent <ul> 
} 

в моей попытке упростить код, я, возможно, сделал ошибку, или 2, но everyth ing работает на фактическом сайте. Когда вы нажимаете элемент в меню списка, он правильно отображает элемент, который вы нажали. Когда вы нажимаете li с id #all, он правильно отображает все элементы и закрывает меню с помощью небольшой анимации slideUp.

Так что да, это работает, но это просто «чувствует», как неправильный способ сделать это. Является ли это приемлемым методом передовой практики?

Я мог бы вызвать функцию closeMenu() внутри функции filter(), когда я обнаружил, что все было нажато, но если вышеуказанный подход в порядке, то я бы предпочел не тратить время (фактический сайт значительно более сложный, чем приведенный выше пример, поэтому я должен был бы сделать это в кучке мест).

+0

Возможный дубликат [Могут ли несколько слушателей событий/обработчики быть добавлен к тому же элементу с помощью javascript?] (http://stackoverflow.com/questions/5411055/can-multiple-event-listeners-handlers-be-added-to-the-same-element-using-javascr) –

ответ

3

Это не так. На самом деле, это хорошая практика, чтобы каждый компонент javascript устанавливал свои собственные обработчики событий. Таким образом, у вас будут разные файлы javascript, которые могут добавить обработчик событий. Это лучше, чем ручное слияние кода, чтобы избежать даже одного обработчика.

Другими словами, делать то, что является самым ясным.

+0

единственная проблема, с которой вы могли столкнуться, - это если одна из ваших связанных функций разбивает пузырь событий или возвращает false – nderscore

1

Нет ничего плохого в этом подходе.

Этот подход является более читаемым и понятным, иначе вы бы добавить больше условий в обработчике щелчка, чтобы проверить, является ли он all элемент затем вызвать специфический метод

Смежные вопросы