2015-06-02 2 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

Смежные вопросы