2010-02-01 12 views
24

के साथ एक समारोह भंडारण jQuery .data() documentation निम्नलिखित कहते हैं। मैं इस तरह के रूप आईडी foo के साथ एक div है कहते हैं:jQuery डेटा() विधि

<div id="foo">Foo!</div> 

और मैं एक समारोह में यह say है कि एक पैरामीटर लेता है कहा जाता है स्टोर करने के लिए करना चाहते हैं। प्रलेखन के अनुसार मैं समारोह इस तरह की दुकान चाहते हैं:

$("#foo").data("say", function(message){ 
    alert("Foo says "+message); 
}); 

मेरा प्रश्न है, मैं कैसे एक पैरामीटर के साथ समारोह आह्वान करते जब मैं ऐसा करने के लिए कामना करता हूं।

$("#foo").data("say"); फ़ंक्शन को वापस करना चाहिए, लेकिन मैं इसे पैरामीटर कैसे पास करूंगा?

धन्यवाद!

उत्तर

25
var myFunction = $("#foo").data("say"); 
myFunction(someParameter); 
+0

दिलचस्प! मै उसे करने की एक कोशिश तो करूंगा। धन्यवाद! –

+11

'$ (" # foo ")। डेटा (" कहें ") (" हैलो "); 'काम भी लगता है। – Kobi

41

data में कार्यों भंडारण कस्टम घटनाओं उपयोग कर रहा है के लिए एक बेहतर विकल्प। यह on और trigger के साथ आसानी से किया जा सकता है:

$('#foo').on('say', function(e, arg){ 
    alert('Foo says ' + arg); 
}); 

$('#foo').trigger('say', 'hello'); 

उदाहरण: http://jsfiddle.net/tW66j/

नोट: jQuery (1.7 तक) के पिछले संस्करणों पर, .bind.on के बजाय इस्तेमाल किया गया था।

+0

+1 - यह बहुत अच्छी सलाह है, लेकिन डारिन ने मेरे प्रश्न का बिल्कुल जवाब दिया। बहुत बहुत धन्यवाद। –

+0

कभी-कभी यह उपयोगी होता है। ऐसे मामले पर विचार करें जहां आप डेटा को लाने के लिए एक समान तरीका चाहते हैं जो कि डोम नोड से अर्थात् संबद्ध है, लेकिन डेटा-फ़ेचिंग का कार्यान्वयन नोड प्रकार के आधार पर भिन्न होता है। – bjornl

+0

हम निश्चित रूप से एक XPath या लक्षित डोम नोड ऑब्जेक्ट को स्वयं लाने के लिए स्टोर कर सकते हैं लेकिन कॉलबैक फ़ंक्शन अधिक एक्स्टेंसिबल है और इसके लिए डोम नोड ऑब्जेक्ट्स – bjornl

4

विधि को कॉल करने के लिए यहां एक और शानदार तरीका है।

// store the method with data 
$('#foo').data('bar',function(){console.log("Givin it the business!")}); 

// Simple execution (this will not keep the method in scope) 
$('#foo').data('bar')(); 

// scoped method execution with call([scope,arguments[]]), takes arguments with comma separation 
$('#foo').data('bar').call($('#foo').first()[0],'arguemnts','for','method'); 

// scoped method execution with apply(scope[,argument[]]), takes an array of arguments 
$('#foo').data('bar').apply($('#foo').first()[0],['arguemnts','for','method']); 

लागू विधि: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/apply

कॉल विधि: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/call

+1

.data का उपयोग करके फ़ंक्शंस को संग्रहीत करने और कॉल करने के लिए उपरोक्त। हालांकि, मैंने यह कोशिश की और जब आप इस तरह से '$ (' # foo ') संग्रहीत फ़ंक्शन को कॉल करते हैं। डेटा (' बार ')();' यह इसके संदर्भ को खो देता है। $ (यह) अब डोमविंडो को संदर्भित करता है, $ (# foo) नहीं। कोबी का समाधान हालांकि ($) के लिए फ़ंक्शन का संदर्भ रखता है। – noir

+0

हाँ, यह नहीं है कि इसे दायरे में कैसे रखा जाए, आपको कॉल का उपयोग करने या निष्पादन को दायरे में रखने के लिए विधि लागू करने की आवश्यकता होगी। –

+0

डेटा() विशेषता के लिए jquery संस्करण आवश्यक है – Mou

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