2015-12-23 13 views
7

Chiedersi se esiste un modo per combinare codice identico di 2 funzioni separate in 1 funzione.

Nel mio caso:.

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

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

Anche tenere a mente che la funzione di ridimensionamento potrebbe rallentare brwoser del vostro cliente/fare il ridimensionamento lag lag, vedere [questo] di riferimento (http://gomakethings.com/javascript-resize-performance/) su come impedirlo. –

risposta

14

È possibile definire una sola funzione che si chiama sotto entrambi gli eventi:

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

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

Tenete a mente che il riferimento alla this sarà diverso a seconda dell'evento in rilievo, che dovrebbe essere utilizzato entro la vostra funzione doSomething.

5

È possibile creare una funzione al gestore di entrambi gli eventi e passare questo riferimento funzione per i gestori di eventi

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

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

jQuery(window).resize(myHandler); 
3

creare una funzione separata e lo chiamano da posizioni richieste:

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


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

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

perché stai chiudendo la chiamata a myFunction con una funzione anonima che non fa nulla? Potresti passare direttamente myFunction. – Racheet

+0

questo è molto vero @Racheet ...! – vijayP

4

C'è un altro modo per farlo.

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

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

@Tushar sì, mi hai preso. – gaowhen