जावास्क्रिप्ट, एचटीएमएल और ऑनक्लिक - फ़ंक्शन परिभाषित नहीं किया गया है

मैं जावास्क्रिप्ट में एक रिच टेक्स्ट एडिटर को "सम्मिलित लिंक" बटन बनाने की कोशिश कर रहा हूं। असल में, यह क्या करेगा जो निम्नलिखित सामग्री को अपनी सामग्री में जोड़ रहा है:

 textGoesHere 

पकड़ है, जब उपयोगकर्ता संपादक के अंदर बटन पर क्लिक करता है तो someJSFunction() को आग लगनी चाहिए। मैंने एक जावास्क्रिप्ट फ़ंक्शन लिखा जो उस कोड को जोड़ता है जब सम्मिलित लिंक बटन पर क्लिक किया जाता है, इस तरह:

editor.setContent(previousContent + theHtmlCode);

हालांकि, जब मैं लिंक someJSFunction() पर क्लिक नहीं करता हूं, और इसके बजाय मुझे "फ़ंक्शन परिभाषित नहीं किया गया" त्रुटि मिलती है। मैंने वैश्विक दायरे में someJSFunction() को परिभाषित करने का प्रयास किया, लेकिन यह अभी भी इसे नहीं देख पाएगा। अजीब चीज है, भले ही मैं जोड़ना पसंद करता हूं

<script type="text/javascript"> *(I define someJSFunction() here)* </script>  textGoesHere 

संपादक की सामग्री के लिए यह अभी भी एक ही त्रुटि फेंक देगा। मैंने एसओ में कुछ लोगों को एक ही समस्या के साथ देखा है, लेकिन वे वैश्विक स्तर पर अपने कार्यों को परिभाषित करके इसे हल करने में कामयाब रहे।

ध्यान दें कि मैं सीधे HTML कोड संपादित नहीं कर सकता, इसलिए मुझे जावास्क्रिप्ट का एक टुकड़ा उपयोग करने का सहारा लेना है जो HTML का एक टुकड़ा डालेगा जो बदले में जावास्क्रिप्ट का एक और टुकड़ा कॉल करेगा।

और इससे पहले कि आप पूछें, नहीं, मैं jQuery का उपयोग नहीं करूंगा।

0
@ एम 5 9 ठीक है। क्या आप इस बात को इंगित करने के लिए बहुत दयालु होंगे कि मुझे उस कोड को फिर से लिखना चाहिए, और यह इतना बुरा अभ्यास क्यों है? मुझे ग्लोबल्स बुराई होने के बारे में पता है, लेकिन अगर आपने वास्तव में मेरे प्रश्न को पढ़ने के लिए समय निकाला है, तो आप देखेंगे कि मैंने केवल कुछ जेएसफंक्शन को वैश्विक रूप से परिभाषित करने की कोशिश की है क्योंकि यह एसओ में अन्य लोगों के लिए काम करता है।
जोड़ा लेखक Phillipe, स्रोत
@ m59 मुझे पता है कि "बुरी प्रैक्टिस" का क्या अर्थ है। हालांकि, मैं एचटीएमएल के लिए बिल्कुल नया हूं और मैं ईमानदारी से नहीं जानता कि क्यों ऑनक्लिक खराब है, और न ही मुझे कोड कैसे लिखना चाहिए। यह सब एक विशाल परियोजना के संदर्भ में है, इसलिए मुझे संदेह है कि मैं आपको डेमो प्रदान करने में सक्षम हूं, लेकिन बीमार कोशिश करें और कल कुछ प्राप्त करें।
जोड़ा लेखक Phillipe, स्रोत
क्या आप हमें एक JSFiddle दे सकते हैं? कृप्या?
जोड़ा लेखक Robbie Wxyz, स्रोत
@ m59: +1 HTML सत्यापनकर्ता वास्तव में इनलाइन onclick हैंडलर पर असफल होना चाहिए।
जोड़ा लेखक Robbie Wxyz, स्रोत
यदि आपका बटन iframe में है और आपका फ़ंक्शन इसके बाहर है, तो आपको window.top.someJSFunction() पर कॉल करने की आवश्यकता होगी।
जोड़ा लेखक Robbie Wxyz, स्रोत
कृपया अपने एचटीएमएल में हमेशा के लिए onclick का उपयोग करना बंद करें। यह कभी भी एक अच्छा अभ्यास नहीं रहा है। वैश्विक चर भी खराब अभ्यास हैं।
जोड़ा लेखक m59, स्रोत
@SuperScript lol, इनलाइन जेएस को पूरी तरह हटा दिया जाना चाहिए, लेकिन मुझे लगता है कि बहुत से लोगों की समस्याएं पैदा होंगी।
जोड़ा लेखक m59, स्रोत
@Phillipe मैं उस भाग सहित अपने सभी कोड पढ़ा। मैंने इस बारे में टिप्पणी करने के लिए टिप्पणी की कि सिर्फ इसलिए कि कुछ "काम करता है" का मतलब यह नहीं है कि आपको यह करना चाहिए। यदि आप सुपरस्क्रिप्ट के रूप में पूछेंगे और jsbin.com या jsfiddle जैसे किसी चीज़ पर डेमो प्रदान करेंगे तो बहुत से लोग मदद करने में प्रसन्न होंगे
जोड़ा लेखक m59, स्रोत

1 उत्तर

  1. एचटीएमएल में ईवेंट घोषित होने से बचें
  2. निरंतर से बचें

नीचे दिया गया कोड काम करना चाहिए।

एचटीएमएल


Link

जावास्क्रिप्ट

var oLink = document.getElementById('link');
oLink.addEventListener('click', editContent);

function editContent() {
  var oEditor = document.getElementById('editor');
  oEditor.value += "text";
}

The jsfiddle for the example above https://jsfiddle.net/za20w2a4/1/

का आनंद लें !

0
जोड़ा