जैसे jQuery कोड के साथ:
$("#myid").click(myfunction);
function myfunction(arg1, arg2) {/* something */}
myfunctionJQuery का उपयोग करते समय मैं तर्क कैसे पास करूं ?
जैसे jQuery कोड के साथ:
$("#myid").click(myfunction);
function myfunction(arg1, arg2) {/* something */}
myfunctionJQuery का उपयोग करते समय मैं तर्क कैसे पास करूं ?
जवाबों:
इसका सबसे सरल तरीका यह है कि आप ऐसा करें (यह मानकर कि आप किसी भी घटना की जानकारी फंक्शन में नहीं चाहते हैं) ...
$("#myid").click(function() {
myfunction(arg1, arg2);
});
jsFiddle ।
यह एक अनाम फ़ंक्शन बनाता है, जिसे clickइवेंट ट्रिगर होने पर कहा जाता है। यह बदले में myfunction()आपके द्वारा प्रदान किए गए तर्कों के साथ कॉल करेगा।
यदि आप रखना चाहते हैं ThisBinding( thisजब फ़ंक्शन को लागू किया जाता है, तो उस मूल्य को उस तत्व पर सेट करें जो घटना को ट्रिगर करता है), तो फ़ंक्शन को कॉल करें call()।
$("#myid").click(function() {
myfunction.call(this, arg1, arg2);
});
jsFiddle ।
आप संदर्भ को सीधे उस तरह से पारित नहीं कर सकते जिस तरह से आपका उदाहरण बताता है, या इसका एकल तर्क jQuery eventऑब्जेक्ट होगा ।
यदि आप संदर्भ पास करना चाहते हैं, तो आपको jQuery के proxy()फ़ंक्शन (जो एक क्रॉस ब्राउज़र आवरण के लिए है Function.prototype.bind()) का लाभ उठाना चाहिए । यह आपको तर्क है, जो बाध्य कर रहे हैं पारित करने देता से पहलेevent तर्क।
$("#myid").click($.proxy(myfunction, null, arg1, arg2));
jsFiddle ।
इस उदाहरण में, myfunction()इसके ThisBindingअक्षुण्ण के साथ निष्पादित किया जाएगा ( nullकोई वस्तु नहीं है, इसलिए thisघटना के ट्रिगर होने वाले तत्व का सामान्य मूल्य), तर्कों के साथ (क्रम में) arg1, arg2और अंत में jQuery eventऑब्जेक्ट, जिसे आप अनदेखा कर सकते हैं। यदि यह आवश्यक नहीं है (फ़ंक्शन के तर्कों में भी इसका नाम नहीं है)।
तुम भी jQuery का उपयोग इस्तेमाल कर सकते हैं eventवस्तु के dataडेटा पास करने के, लेकिन इस संशोधित करने की आवश्यकता होगी myfunction()के माध्यम से इसे उपयोग करने के लिए event.data.arg1(जो नहीं हैं प्रकार्य तर्क अपने प्रश्न का उल्लेख है की तरह), या कम से कम पूर्व उदाहरण या उत्पन्न एक की तरह एक मैन्युअल प्रॉक्सी क्रिया पेश बाद के उदाहरण का उपयोग करना।
myfunction(this, arg1, arg2)अनाम हैंडलर से कॉल करें । तब आपका कार्य कर सकते हैंmyfunction(el, arg1, arg2) { alert($(el).val()); }
myfunction.call(this, arg1, arg2)।
$("#myid").on('click', {arg1: 'hello', arg2: 'bye'}, myfunction);
function myfunction(e) {
var arg1 = e.data.arg1;
var arg2 = e.data.arg2;
alert(arg1);
alert(arg2);
}
//call method directly:
myfunction({
arg1: 'hello agian',
arg2: 'bye again'
});
इसके अलावा, आप ऑन और ऑफ विधियों का उपयोग करके विशिष्ट ईवेंट हैंडलर्स को बांधने और उन्मुक्त करने की अनुमति देते हैं।
उदाहरण:
$("#myid").off('click', myfunction);
यह #myid से myfunction हैंडलर को खोल देगा
जब आपको निश्चित रूप से एलेक्स के उत्तर का उपयोग करना चाहिए, तो प्रोटोटाइप लाइब्रेरी की "बाइंड" पद्धति को एक्मास्क्रिप्ट 5 में मानकीकृत किया गया है, और जल्द ही इसे मूल रूप से ब्राउज़रों में लागू किया जाएगा। यह इस तरह काम करता है:
jQuery("#myid").click(myfunction.bind(this, arg1, arg2));
thisयदि आप उदाहरण के लिए इस विधि का उपयोग, एक अलग संदर्भ के लिए सेट हो bind()के लिए यह ing thisउस संदर्भ में (वैश्विक) कि क्लिक होने हैंडलर में हो सकता है windowके रूप में वस्तु thisके रूप में के लिए एक संदर्भ के लिए विरोध #myidतत्व?
people reading my answers are smart enough to figure these details out themselvesबारे में नहीं।
पुराना धागा, लेकिन खोज उद्देश्यों के लिए; प्रयत्न:
$(selector).on('mouseover',...);
... और "डेटा" पैरामीटर देखें : http://api.jquery.com/on/
उदाहरण के लिए:
function greet( event ) {
alert( "Hello " + event.data.name );
}
$( "button" ).on( "click", {name: "Karl"}, greet );
$( "button" ).on( "click", {name: "Addy"}, greet );