我有一個預定義的函數,當兩個不同的事件發生時,我想觸發它。下面的代碼工作正常,但是有沒有辦法將這些代碼組合起來以使代碼更有效率?高效編寫函數
$("select[name=some_selector]").blur(function() {
predefined_function();
});
$("a#some_link").click(function() {
predefined_function();
});
我有一個預定義的函數,當兩個不同的事件發生時,我想觸發它。下面的代碼工作正常,但是有沒有辦法將這些代碼組合起來以使代碼更有效率?高效編寫函數
$("select[name=some_selector]").blur(function() {
predefined_function();
});
$("a#some_link").click(function() {
predefined_function();
});
您只能傳遞函數參考。由於他們正在處理不同的event
,所以我們無法合併它們。
$("select[name=some_selector]").blur(predefined_function);
$("a#some_link").click(predefined_function)
傳遞你的函數的引用到兩個這樣的活動結合:
$("select[name=some_selector]").blur(predefined_function);
$("a#some_link").click(predefined_function);
這應該做的伎倆。
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" }
);
不像其他答案那麼容易,但可擴展的解決方案。太好了! – hedgesky
謝謝,覺得有點傻缺少! – jonbaldie
@jonbaldie,傻爲什麼? – Satpal