दिलचस्प पोस्ट
क्या मैं जांच सकता हूं कि कोई फ़ाइल URL पर मौजूद है या नहीं? बहु-भाग की पहचानकर्ता बाध्य नहीं हो सका चयन बटन के बिना GridView में चयन करने वाली पूर्ण पंक्ति को कैसे कार्यान्वित करें? एनिमेटेड HTML5 कैनवास में ज़ूम और पैन करें मैं WinForms एप्लिकेशन को कमांड लाइन आर्ग्यूमेंट कैसे पारित करूं? फ़ायरफ़ॉक्स में छिपे हुए स्क्रॉलबार (स्क्रॉल करने की अनुमति देता है लेकिन सिर्फ कोई स्क्रॉलबार नहीं) एक्लिप्से जूनो / केप्लर / लुना सीडीटी में सी ++ 11 सक्षम करना पूर्ण बनाम सापेक्ष स्थिति चौड़ाई और ऊंचाई चलाने के समय URL के माध्यम से WCF वेब सेवा का उपभोग कैसे करें? 32 बिट पूर्णांक के साथ कम टक्कर दर के साथ फास्ट स्ट्रिंग हैशिंग एल्गोरिथम पृष्ठ के निचले भाग में फुटर फ़्लशिंग, ट्विटर बूटस्ट्रैप ब्राउज़र में आईफ्रेम कैशिंग को रोकना जावास्क्रिप्ट में लूप के लिए एक एसिंक्रोनस फंक्शन को कॉल करना पायथन में, लिनक्स में 'यूएसबी डिवाइस डाले गए' घटनाओं के लिए मैं कैसे सुन सकता हूँ? मैं कोड :: ब्लॉकों के साथ एक पुस्तकालय से कैसे लिंक करूं?

किसी वैरिएबल में नामित जावास्क्रिप्ट फंक्शन कॉल करना

मेरे पास जावास्क्रिप्ट चर है जिसमें जावास्क्रिप्ट फंक्शन का नाम है। यह फ़ंक्शन पृष्ठ पर लोड हो रहा है और $ .एजेएक्स आदि का उपयोग कर रखता है।

क्या कोई मुझे बता सकता है कि मैं चर में नामित जावास्क्रिप्ट समारोह को कैसे कॉल करूंगा, कृपया?

फ़ंक्शन का नाम एक चर में है क्योंकि पृष्ठ का टुकड़ा लोड करने के लिए यूआरएल (जो वर्तमान पृष्ठ में डाला जाता है) में कॉल करने के लिए फ़ंक्शन का नाम होता है।

मैं इस समाधान को कैसे कार्यान्वित करने के बारे में अन्य सुझावों के लिए खुला हूँ

वेब के समाधान से एकत्रित समाधान "किसी वैरिएबल में नामित जावास्क्रिप्ट फंक्शन कॉल करना"

मैं eval से बचना होगा

इस समस्या को हल करने के लिए, आपको जावास्क्रिप्ट के बारे में इन चीजों को जानना चाहिए।

  1. फ़ंक्शंस प्रथम श्रेणी की ऑब्जेक्ट हैं, इसलिए वे एक ऑब्जेक्ट का गुण हो सकते हैं (जिस स्थिति में उन्हें विधियां कहा जाता है ) या एरे के तत्व भी।
  2. यदि आप किसी ऑब्जेक्ट को फ़ंक्शन के अंतर्गत नहीं चुनना चाहते हैं, तो यह वैश्विक दायरा के अंतर्गत आता है। ब्राउज़र में, इसका अर्थ है कि आप इसे "विंडो" नाम वाले ऑब्जेक्ट पर लटका रहे हैं, जहां पर ग्लोब लाइव है
  3. एरेज़ और ऑब्जेक्ट्स सघन रूप से संबंधित हैं (अफवाह यह है कि वे अनाचार का नतीजा भी हो सकते हैं!) आप अक्सर डॉट का इस्तेमाल करके प्रतिस्थापित कर सकते हैं . बजाय वर्ग कोष्ठक [] , या इसके ठीक विपरीत।

आपकी समस्या वर्ग ब्रैकेट के बजाय संदर्भ के डॉट तरीके पर विचार करने का परिणाम है

तो, कुछ ऐसा क्यों नहीं,

 window["functionName"](); 

यह मानते हुए कि आपका फ़ंक्शन वैश्विक अंतरिक्ष में रहता है। यदि आपने नाम दिया है, तो:

 myNameSpace["functionName"](); 

Eval से बचें, और settimeout और setInterval सेट करने के लिए एक स्ट्रिंग से गुजरने से बचें मैं बहुत सारे जेएस लिखता हूं, और मुझे एवल की आवश्यकता नहीं होती। "आवश्यकता" eval भाषा गहराई से पर्याप्त नहीं जानने से आता है आपको स्कोपिंग, प्रसंग और वाक्यविन्यास के बारे में जानने की जरूरत है। यदि आप कभी भी एक eval के साथ अटक कर रहे हैं, बस पूछो – आप जल्दी से सीख लेंगे

यदि यह वैश्विक दायरे में है तो इसका उपयोग करना बेहतर होता है:

 function foo() { alert('foo'); } var a = 'foo'; window[a](); 

से eval() चूंकि eval() evaaaaal है

निसारडे की तरह ठीक कहा है कि मेरे सामने 40 सेकंड है। <

निश्चित रूप से eval का उपयोग इस तरह से कुछ करने से बचें, या आप स्वयं को XSS (क्रॉस-साइट स्क्रिप्टिंग) भेद्यताओं के लिए खुलेंगे

उदाहरण के लिए, यदि आप यहां प्रस्तावित eval समाधानों का उपयोग कर रहे थे, तो एक नेफिशियस उपयोगकर्ता अपने शिकार का एक लिंक भेज सकता है जो इस तरह दिखता है:

http://yoursite.com/foo.html?func=function() {चेतावनी ('Im% 20In% 20Teh% 20Codez');}

और उनकी जावास्क्रिप्ट, आपकी नहीं, निष्पादित हो जाएगी। यह कोड सिर्फ एक चेतावनी को पॉप अप से कहीं ज्यादा खराब कर सकता है; यह कुकीज़ चोरी कर सकता है, आपके आवेदन में अनुरोध भेज सकता है आदि।

इसलिए, सुनिश्चित करें कि आपने कभी अविश्वसनीय कोड नहीं छोड़ा है जो उपयोगकर्ता इनपुट से आता है (और क्वेरी स्ट्रिंग आईडी पर कुछ भी उपयोगकर्ता माना जाता है)। आप उपयोगकर्ता इनपुट को एक ऐसी कुंजी के रूप में ले सकते हैं जो आपके फ़ंक्शन को इंगित करेगा, लेकिन सुनिश्चित करें कि आप कुछ भी निष्पादित नहीं करते हैं यदि दी गई स्ट्रिंग आपके ऑब्जेक्ट में किसी कुंजी से मेल नहीं खाती है। उदाहरण के लिए:

 // set up the possible functions: var myFuncs = { func1: function () { alert('Function 1'); }, func2: function () { alert('Function 2'); }, func3: function () { alert('Function 3'); }, func4: function () { alert('Function 4'); }, func5: function () { alert('Function 5'); } }; // execute the one specified in the 'funcToRun' variable: myFuncs[funcToRun](); 

यह असफल हो जायेगा अगर funcToRun चर myFuncs ऑब्जेक्ट में कुछ भी नहीं इंगित करता है, लेकिन यह कोई कोड निष्पादित नहीं करेगा।

यह थोड़े बदसूरत है, लेकिन यह मेरे सिर में popped है कि पहली बात है। यह भी आपको तर्क में पारित करने की अनुमति चाहिए:

 eval('var myfunc = ' + variable); myfunc(args, ...); 

यदि आपको तर्क में पारित करने की आवश्यकता नहीं है, यह आसान हो सकता है।

 eval(variable + '();'); 

मानक सूखी-कोड चेतावनी लागू होती है।