2013-10-08 5 views
4

У меня есть функция, я хотел бы сделать каждый раз, когда пользователь нажимает либо один из элементов анкерных, такие, как этоJQuery того же функция для нескольких элементов и несколько событий

$('.element').on('click', function(){ 
// do stuff here 
}); 

и я хочу сделать то же самое если выбрать элемент изменил свое значение, например, как это

$('select').on('change', function(){ 
// do same stuff here 
}); 

Я знаю, что я мог сделать

$('.element', 'select').on('click change', function(){ 
// do stuff here 
}); 

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

ответ

20

У вас нет есть, чтобы сделать вашу функцию встроенной.

var doStuff = function() { 
    // do stuff here 
}); 

$('.element').on('click', doStuff); 
$('select').on('change', doStuff); 
7

Один из самых читаемых способов обработки этого является создание отдельной функции:

function doStuff(){ 
//do stuff here 
} 

$('.element').on('click', function(){ 
    doStuff(); 
}); 

$('select').on('change', function(){ 
    doStuff(); 
}); 

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

+2

Ответ Киппи строго лучше, чем этот. –

+1

Зачем называть '' doStuff'' inline? Таким образом, область действия вашей функции будет потеряна, а '' this'' будет глобальным, а не вызывающим элементом. – Kippie

+2

Да, в большинстве случаев лучше взять подход Киппи (передать функцию, а не называть ее). Я хотел, чтобы это было более ясным для ОП, что происходит, и дать им возможность делать другие вещи в каждом случае, если есть различия, которые они не упомянули. Шаги малыша. Я не изменю свой ответ, но да, прочитайте мой ответ, чтобы убедиться, что вы понимаете, что происходит, но на самом деле делайте это так, как это делал Киппи. –

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