2015-06-02 40 views
5

我有一個預定義的函數,當兩個不同的事件發生時,我想觸發它​​。下面的代碼工作正常,但是有沒有辦法將這些代碼組合起來以使代碼更有效率?高效編寫函數

$("select[name=some_selector]").blur(function() { 
    predefined_function(); 
}); 
$("a#some_link").click(function() { 
    predefined_function(); 
}); 

回答

5

您只能傳遞函數參考。由於他們正在處理不同的event,所以我們無法合併它們。

$("select[name=some_selector]").blur(predefined_function); 
$("a#some_link").click(predefined_function) 
+0

謝謝,覺得有點傻缺少! – jonbaldie

+0

@jonbaldie,傻爲什麼? – Satpal

5

傳遞你的函數的引用到兩個這樣的活動結合:

$("select[name=some_selector]").blur(predefined_function); 
$("a#some_link").click(predefined_function); 

這應該做的伎倆。

3
function RaisePredefinedOnEvent(selector, ev) { 
    $(selector)[ev](function() { 
     predefined_function(); 
    }); 
} 

RaisePredefinedOnEvent("select[name=some_selector]", "blur"); 
RaisePredefinedOnEvent("a#some_link", "click"); 

另一種選擇(不知道什麼時候你真的需要像這樣只是爲了連接最多的事件,但有趣的代碼:-D)

function RaisePredefinedOnEvent() { 
    for(var i = 0; i < arguments.length; i++) { 
     //Note: No need to wrap in anonymous function: 
     $(arguments[i][0])[arguments[i][1]](predefined_function); 
    } 
} 

//Code above is quite ugly, but makes this very small 
RaisePredefinedOnEvent(
    { "select[name=some_selector]" : "blur" }, 
    { "a#some_link" : "click" } 
); 
+0

不像其他答案那麼容易,但可擴展的解決方案。太好了! – hedgesky