2015-12-23 2 views
7

Удивление, если есть способ объединить идентичный код из двух отдельных функций в 1 функцию.

в моем случае:.

jQuery('body').on('click', '.some_div', function (e) { 
    // Long and fancy code 
}); 

jQuery(window).resize(function() { 
    // Do the same fancy stuff (identical code) 
}); 
+2

Также имейте в виду, что функция изменения размера может замедлить brwoser вашего клиента/сделать изменения размера лага лага см [это] ссылка (http://gomakethings.com/javascript-resize-performance/) о том, как предотвратите это. –

ответ

14

вы можете определить одну функцию, которую вы называете под оба события:

function doSomething(e) { 
    console.log('Your code here...'); 
} 

jQuery('body').on('click', '.some_div', doSomething); 
jQuery(window).resize(doSomething); 

Имейте в виду, что ссылка на this будет отличаться в зависимости от события поднятом, следует, что можно использовать в вашей doSomething функции.

5

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

function myHandler(e) { 
    // Long and fancy code 
} 

jQuery('body').on('click', '.some_div', myHandler); 

jQuery(window).resize(myHandler); 
3

создать отдельную функцию и вызывать ее из требуемых мест:

jQuery('body').on('click', '.some_div', function(e){ 
    myFunction(); 
}); 


jQuery(window).resize(function() { 
    myFunction(); 
}); 

function myFunction(){ 
    // Long and fancy code 
} 
+1

Почему вы завершаете вызов myFunction анонимной функцией, которая ничего не делает? Вы можете просто передать myFunction напрямую. – Racheet

+0

thats очень настоящий @Racheet ...! – vijayP

4

Там еще один способ сделать это.

jQuery('body').on('click', '.some_div', function (e) { 
    // Long and fancy code 
}); 

jQuery(window).resize(function() { 
    $('.some_div').trigger('click') 
}); 
+0

@ Тушар, да, ты меня достал. – gaowhen