2010-08-23 11 views
6

मैं उस फ़ंक्शन के बाहर एक चर वैल्यू का उपयोग करने की कोशिश कर रहा हूं जिसमें इसे परिभाषित किया गया था। विचार I को केवल फ़ंक्शन के बाहर चर घोषित करने की आवश्यकता है, लेकिन यह इसे काट नहीं देता है । उन लोगों के लिए आसान होना चाहिए जो जानते हैं?

Fiddle Herejquery/जावास्क्रिप्ट - किसी फ़ंक्शन के बाहर से चर का उपयोग

jQuery(document).ready(function() { 

    var readOut; 
    var readOut2; 

    $(document).mousemove(function(e) { 
     readOut1 = e.pageX; 
     readOut2 = e.pageY; 
     $('#var1').html(readOut1); 

    }); 

    $('#var2').html(readOut2); 
})​ 

सभी को धन्यवाद, explaination और solution साथ विशेष रूप से एंडी ई।

+0

कोशिश 'var' चर घोषणा से निकालने, के रूप में यह चर वैश्विक करना चाहिए, या उन्हें तैयार समारोह के बाहर रखा गया है। किसी भी जवाब में इसे रखने के लिए पर्याप्त भ्रष्ट नहीं हैं :) अगर यह काम करता है तो मुझे बताएं। मुझे लगता है कि चर केवल तैयार() फ़ंक्शन के लिए स्थानीय हैं। –

+0

आपकी समस्या क्या है? टाइपो को छोड़कर ('var readOut; 'बनाम' readOut1 = ... ') आपका कोड काम कर रहा है जैसा कि करना चाहिए। – adamse

+0

@tom: आप गलत हैं। आप जो सुझाव दे रहे हैं वह काम करेगा, हालांकि, यह अभी भी काम करना चाहिए। लागू ग्लोबल्स खराब नहीं हैं। आंतरिक ('mousemove' हैंडलर) के पास 'तैयार' हैंडलर के सभी चरों तक पहुंच है। (इस पर अधिक के लिए खोजशब्द खोजें: जावास्क्रिप्ट, बंद) – adamse

उत्तर

5

आप एक कॉलबैक फ़ंक्शन के माध्यम से चर को असाइन कर रहे हैं जो किसी ईवेंट हैंडलर में पंजीकृत है। इसका मतलब यह है कि जब यह चलाता है:

$('#var2').html(readOut2); 

readOut2अपरिभाषित का अपना महत्व होता है क्योंकि यह अभी तक MouseMove हैंडलर समारोह द्वारा निर्धारित नहीं किया गया है। उस हैंडलर तब तक आग नहीं लगाएगा जब तक कि वर्तमान कतारबद्ध कोड निष्पादित नहीं हो जाता है और उपयोगकर्ता अपना माउस ले जाता है। आप चर के रूप में एक ही दायरे में एक फ़ंक्शन को परिभाषित कर सकते हैं, और mousemove हैंडलर से उस फ़ंक्शन को कॉल कर सकते हैं।

पुन: एक और जवाब पर अपनी टिप्पणी के लिए, आप एक टाइमर इस्तेमाल कर सकते हैं:

jQuery(document).ready(function() {  
    var readOut1; 
    var readOut2; 

    $(document).mousemove(function(e) { 
     readOut1 = e.pageX; 
     readOut2 = e.pageY; 
     $('#var1').html(readOut1); 

    }); 

    window.setInterval(function() { 
     $('#var2').html(readOut2); 
    }, 300); 
})​; 
+0

अच्छा। यह सब मेरे लिए, चीयर्स को मंजूरी दे दी है! – jack

2

मुझे लगता है कि आप कर्सर निर्देशांक ट्रैक करना चाहते हैं, अद्यतन सोर्स कोड देखें:

jQuery(document).ready(function() { 

    var readOut1; 
    var readOut2; 

    $(document).mousemove(function(e) { 
     readOut1 = e.pageX; 
     readOut2 = e.pageY; 
     $('#var1').html(readOut1); 
     $('#var2').html(readOut2); 
    }); 

})​ 

http://jsfiddle.net/xSa2T/2/

+0

हे धन्यवाद, मैं इसका उदाहरण एक उदाहरण के रूप में उपयोग कर रहा था।हां, मैं कर्सर आंदोलनों को ट्रैक करना चाहता हूं, लेकिन mousemove फ़ंक्शन के बाहर के मान का उपयोग करना चाहता हूं, यही कारण है कि मैंने var2 लाइन को स्थानांतरित किया। – jack

1

एक समय की समस्या की तरह लगता है।

इस लाइन

$('#var2').html(readOut2); 

वाला, document.ready पर कहा जाता हो जाता है, जबकि MouseMove घटना अभी तक कहा जाता है नहीं किया गया है, इसलिए readOut2 अभी तक एक मूल्य के लिए नहीं होगा।

+0

आह हाँ, मुझे कितना घना है। क्या मैं readOut2 को लगातार अद्यतन करने के लिए setInterval का उपयोग कर सकता हूं? – jack

1

लेकिन

चर readOut1 और के रूप में MouseMove समारोह पर बाहर मूल्य का उपयोग करना चाहते readOut2 MouseMove ईवेंट हैंडलर चलाया जाता है आप किसी भी कोड का उपयोग करेगा फोन करना होगा पहले सेट नहीं किया जा सकता मूसमोव हैंडलर से ये चर।

उदाहरण:

$(document).mousemove(function(e) { 
    readOut1 = e.pageX; 
    readOut2 = e.pageY; 

    doStuffWithReadOuts(/* possibly passing readouts as arguments instead... */); 
}); 

function doStuffWithReadOuts() { 
     $('#var1').html(readOut1); 
     $('#var2').html(readOut2); 
} 
+0

चीयर्स बहुत उपयोगी है। मुझे आश्चर्य है कि readOut2 डिस्प्ले को टाइमर से सेट किया जा सकता है जैसे कि mousemove के बजाय setInterval? – jack

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