Ну, так как javascript является управляемым событиями языком программирования, я бы порекомендовал первый.
Вот случай, который иллюстрирует преимущества использования обработчиков событий вместо простых вызовов функций:
function someEventHandler(){
if($(this).hasClass('some-class'))
// do something
}
$('element').bind('eventName.eventNamespace',someEventHandler);
Теперь, если вы просто вызовете эту функцию, такую как:
someEventHandler();
, вы увидите, что она не будет иметь никакого эффекта, потому что она предназначена для выполнения в дом.element context.
Если вы инициируете событие с функцией someEventHandler
в качестве обработчика события:
$('element').trigger('eventName.eventNamespace');
функция вызывается в контексте элемента, что-то вроде:
someEventHandler.call($('element').get(0));
, который будет иметь желаемый эффект.
Кроме того, вы можете привязать несколько обработчиков событий к одному событию и привязать его к нескольким элементам.
Если вы хотите вызывать функцию для каждогоиз списка элементов dom, вы должны будете сделать что-то вроде этого:
someEventHandler.call($('element1').get(0));
someEventHandler.call($('element2').get(0));
someEventHandler.call($('element3').get(0));
// ... and so on
, а с первым методом будет намного проще:
$('element1,element2,element3').bind('eventName.eventNamespace',someEventHandler);
$('element1,element2,element3').trigger('eventName.eventNamespace');
Обратите внимание, что подход уЭто зависит от контекста, в котором вы используете эти функции.Если ваша функция не имеет никакого отношения к элементу dom или вы не хотите, чтобы больше объектов подписывалось на ваше событие, вам, вероятно, следует сделать его простым и использовать классические объявления функций и вызовы.