2010-02-23 18 views
20

मैं इस धारणा के तहत था कि URL में विशेषताओं जैसे कि hrefs में जावास्क्रिप्ट का उपयोग करते समय मुझे केवल "प्रोटोकॉल" निर्दिष्ट करने की आवश्यकता है। क्या यह javascript: के लिए एकमात्र "उपयोगी" संदर्भ है?मुझे जावास्क्रिप्ट प्रोटोकॉल निर्दिष्ट करने की आवश्यकता कब है?

समझदार:

<a href="javascript:alert('Hello')">World!</a> 

बेवकूफ:

<form onsubmit="javascript:alert('oops!')"> 

यह सही है? या क्या कुछ अस्पष्ट बग/उपयोग केस है जिसके बारे में मुझे अवगत होना चाहिए?

उत्तर

14

javascript: ईवेंट हैंडलर्स पर छद्म प्रोटोकॉल केवल नजरअंदाज कर दिया जाएगा, तो आप इसे ज़रूरत नहीं है, JavaScript इंजन एक Label Statement रूप javascript: व्याख्या करेगा।

एक लेबल बस एक कथन के लिए पहचानकर्ता प्रदान करता है, और आपको इसे अपने प्रोग्राम में कहीं और संदर्भित करने देता है।

4

इसे कभी भी निर्दिष्ट न करें।

<a href='#' onclick='alert("Hello")'>World</a> 

यह बीते हुए दिनों से एक अवशेष है: यह <a> टैग, जो बजाय इस तरह कोडित किया जाना चाहिए में यह करने के लिए गलत है। एकमात्र समय मैं सोच सकता हूं कि इसका उपयोग कहां किया जाता है ब्राउज़र पता बार (और बुकमार्लेट बुकमार्क्स) में होगा। इसे अपने पृष्ठों से बाहर रखें।

+6

'झूठी वापस जाने के लिए याद रखें,' अगर आप # का उपयोग इतना है कि यह 'href' कार्रवाई को रोक देता है और (खराब) पेज के शीर्ष या अपने हैश बदलने यदि आप एक है कि आप वास्तव में इस्तेमाल कर रहे थे था करने के लिए जाने नहीं करता है कुछ के लिए। वैकल्पिक रूप से आप 'जावास्क्रिप्ट: //' का उपयोग 'href' के रूप में कर सकते हैं जो वास्तव में कुछ भी नहीं करेगा। – Nicole

+5

+1 @ पुनर्जागरण। साथ ही, आप उस विधि के साथ href में एक साधारण विवरण भी जोड़ सकते हैं .. उदाहरण के लिए: 'जावास्क्रिप्ट: // नई विंडो में खोलें'। यह एक जेएस टिप्पणी है ताकि आप वहां कुछ भी डाल सकें। यह मददगार है क्योंकि यह स्टेटस बार में प्रदर्शित होगा जब उपयोगकर्ता – adamJLev

+0

@ इन्फिनिटी - कूल विचार पर लिंक करता है! मैंने पहले इसके बारे में सोचा नहीं था। – Nicole

2

अभ्यास में, आप सही हैं:

IMHO, इस छद्म प्रोटोकॉल

अनुशंसित लेख बुकमार्कलेट के लिए ही उपयोगी है ...।

आपको किसी भी उदाहरण में ऐसा करने की आवश्यकता है जहां स्क्रिप्ट के अलावा कुछ और अपेक्षित है। सिद्धांत रूप में, आप javascript:whatever कहीं भी यूआरएल का उपयोग कर सकते हैं, लेकिन यह कभी समर्थित नहीं था और अब आधिकारिक तौर पर उपयोग के खिलाफ सिफारिश की जाती है।

हालांकि, आपको वास्तव में javascript: का उपयोग नहीं करना चाहिए। लिंक के लिए, आप onclick विशेषता का उपयोग कर सकते हैं। वास्तव में आजकल क्या हो रहा है जावास्क्रिप्ट इंजन javascript: को लेबल के रूप में पहचान रहा है, यही कारण है कि कोड निष्पादित होता है।

4

जैसा कि अन्य उत्तरों का उल्लेख किया गया है, javascript: href लिंक के उपयोग से बचें, और यह घटना हैंडलर विशेषताओं में पूरी तरह से अनावश्यक है। हालांकि, A टैग कभी-कभी अभी भी अर्थात् सही रूप से सही होते हैं, इसलिए आपको विशेषता में कुछ डालना होगा यदि आप अपने :link और :hover सीएसएस शैलियों को इंटरनेट एक्सप्लोरर में तत्व पर लागू करने के लिए चाहते हैं।इस मामले में, का उपयोग करें:

<a href="#" onclick="doSomething(); return false;">Link</a> 

या

<a href="javascript://" onclick="doSomething();">Link</a> 

वहाँ एक (कुछ हद तक अस्पष्ट) जावास्क्रिप्ट प्रोटोकॉल के साथ बग है - इंटरनेट एक्सप्लोरर * में, यह आप पेज जब छोड़ रहे हैं सोचेंगे आप लिंक पर क्लिक करें। आप window.onbeforeunload उपयोग कर रहे हैं, तो अपने नेविगेट दूर संदेश इस समय दिखाई देगा। अकेले इस कारण से, हम जावास्क्रिप्ट प्रोटोकॉल पूरी तरह से उपयोग कर रहा है ताकि हम इस बग दिखाई क्योंकि हम जब हम कुछ पृष्ठ के लिए एक नेविगेट दूर संदेश जोड़ इसके लिए जाँच करने के लिए भूल गया नहीं है बंद कर दिया है।


* मैं शायद संस्करण निर्दिष्ट किया जाना चाहिए था जब मैं पहली बार यह लिखा। मुझे बिल्कुल याद नहीं है, लेकिन अगर बग केवल आईई 6 या 7 जैसे अब-अधिकतर निष्क्रिय ब्राउज़र में मौजूद है, तो शायद आप इसे स्वयं परीक्षण करने के लिए सबसे अच्छे हैं।

+0

+1 कुडोस – cgp

1

आप सभी बाहर http://bytes.com/topic/javascript/answers/504856-javascript-pseudo-protocol-event-handlers विशेष रूप से पोस्ट "लासे Reichstein नीलसन" द्वारा, जाँच करनी चाहिए क्योंकि ज्यादातर जवाब यहाँ कुछ फैशन में सही नहीं हैं।

भी याद रखें कि एंकर टैग बिल्कुल एक href की आवश्यकता नहीं है! यह <a>hi</a> मान्य xhtml है। href="#" का उपयोग करने में समस्या यह है कि यह पृष्ठ के शीर्ष पर स्क्रॉल कर सकता है .. इसकी आवश्यकता नहीं है। आखिरकार यदि आप वास्तव में एंकर टैग के व्यवहार को नहीं चाहते हैं तो आपको इसका उपयोग नहीं करना चाहिए। आप एक लंगर सीएसएस (cursor:pointer) और mouseenter और mouseleave तरह की घटनाओं का उपयोग कर अनुकरण (अधिक काम है जो, लेकिन "तोड़" एक लंगर टैग से अपेक्षित व्यवहार नहीं करता है) कर सकते हैं।

+0

"बस आवश्यक नहीं" सभी ब्राउज़रों के लिए सच नहीं है। 'Href' के बिना, IE के कुछ संस्करणों में सही सीएसएस शैलियों को लागू नहीं किया जाएगा और एंकर टैग को टेक्स्ट से अलग नहीं किया जाएगा, और न ही यह 'होवर' का उपयोग करने में सक्षम होगा। – Nicole

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

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