क्या किसी पैरामीटर के साथ एक जावास्क्रिप्ट फ़ंक्शन को पैरामीटर के रूप में पारित करना संभव है?
उदाहरण:
$(edit_link).click( changeViewMode( myvar ) );
क्या किसी पैरामीटर के साथ एक जावास्क्रिप्ट फ़ंक्शन को पैरामीटर के रूप में पारित करना संभव है?
उदाहरण:
$(edit_link).click( changeViewMode( myvar ) );
जवाबों:
एक "बंद" का उपयोग करें:
$(edit_link).click(function(){ return changeViewMode(myvar); });
यह एक अनाम अस्थायी फ़ंक्शन आवरण बनाता है जो पैरामीटर के बारे में जानता है और वास्तविक कॉलबैक कार्यान्वयन के लिए इसे पास करता है।
this.myFunction = this.myFunction.bind(this)अपनी constructorविधि का उपयोग करना चाहिए । लेकिन, जैसा आपने कहा, जब आपको हर एक के लिए अलग-अलग संदर्भों को पास करना होता है, जैसे कि उन सभी अलग-अलग पंक्तियों को जो आप उस पंक्ति के विवरण पृष्ठ को खोलने के लिए क्लिक करते हैं, तो यह बेहतर नहीं है।
का उपयोग करें Function.prototype.bind()। एमडीएन का हवाला देते हुए:
bind()विधि एक नया कार्य है कि, जब कहा जाता है, इसकी है बनाताthisकीवर्ड सेट प्रदान किया गया मान के लिए, पिछले जब नया समारोह कहा जाता है किसी भी प्रदान किए गए तर्कों की दी गई अनुक्रम के साथ।
यह IE9 + सहित सभी प्रमुख ब्राउज़रों द्वारा समर्थित है।
आपका कोड इस तरह दिखना चाहिए:
$(edit_link).click(changeViewMode.bind(null, myvar));
साइड नोट: मेरा मानना है कि आप वैश्विक संदर्भ में हैं, अर्थात thisपरिवर्तनशील है window; अन्यथा के thisबजाय का उपयोग करें null।
$.ajax(url).done(handler.bind(this, var1, var2));
हां मुझे यह पंसद है:
$(edit_link).click(function() { changeViewMode(myvar) });
या यदि आप es6 का उपयोग कर रहे हैं, तो आपको एक तीर फ़ंक्शन का उपयोग करने में सक्षम होना चाहिए
$(edit_link).click(() => changeViewMode(myvar));
तुम यह केर सकते हो
var message = 'Hello World';
var callback = function(){
alert(this)
}.bind(message);
और फिर
function activate(callback){
callback && callback();
}
activate(callback);
या यदि आपके कॉलबैक में अधिक लचीले तर्क हैं तो आप ऑब्जेक्ट पास कर सकते हैं।
यह फर्डिनेंड बेयर के दृष्टिकोण के बाद एक उदाहरण है:
function function1()
{
function2(function () { function3("parameter value"); });
}
function function2(functionToBindOnClick)
{
$(".myButton").click(functionToBindOnClick);
}
function function3(message) { alert(message); }
इस उदाहरण में "पैरामीटर मान" फ़ंक्शन 1 से फ़ंक्शन 3 के माध्यम से फ़ंक्शन 2 से फ़ंक्शन 3 से पारित किया जाता है।