2015-06-02 21 views
5

Tôi có một chức năng được xác định trước mà tôi muốn kích hoạt khi có hai sự kiện khác nhau xảy ra. Mã bên dưới hoạt động tốt, nhưng có cách nào để kết hợp các mã này để làm cho mã hiệu quả hơn không?Chức năng viết hiệu quả

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

Trả lời

5

Bạn chỉ có thể tham khảo chức năng tham khảo. Vì họ đang làm việc trên event khác nhau, chúng tôi không thể kết hợp chúng.

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

Cảm ơn, cảm thấy một chút ngớ ngẩn cho thiếu đó ! – jonbaldie

+0

@jonbaldie, ngớ ngẩn tại sao? – Satpal

5

Vượt qua tham khảo các chức năng của bạn để cả hai sự kiện ràng buộc như thế này:

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

này nên làm các trick.

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

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

Một thay thế (không chắc chắn khi bạn muốn thực sự cần một cái gì đó như thế này chỉ dành riêng cho dây lên các sự kiện, nhưng niềm vui để mã :-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

Không dễ như các câu trả lời khác, nhưng giải pháp có thể mở rộng. Tốt đẹp! – hedgesky

Các vấn đề liên quan