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

@ जेनबाल्डी, मूर्ख क्यों? – 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

संबंधित मुद्दे