2015-12-23 20 views
7

2つの別々の関数の同じコードを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

またどのように上の[この](http://gomakethings.com/javascript-resize-performance/)リファレンスを参照してください、リサイズ機能はラグラグのサイズを変更します/クライアントのbrwoserが遅くなる可能性があることに注意してくださいそれを防ぐ。 –

答えて

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非常にtrue @ 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

関連する問題