2013-06-13 18 views
5

सबसे पहले, मुझे कोई वास्तविक समस्या नहीं है। मैं केवल जिज्ञासा से यह पूछ रहा हूँ।जावास्क्रिप्ट: शून्य (0) और लक्ष्य = "_ खाली" व्यवहार

इस तरह के लिंक के भीतर javascript:void(0) और target="_blank" का उपयोग करते समय मैं गलती से एक अजीब व्यवहार में चला जाता हूं।

<a href="javascript:void(0);" target="_blank" /> Link </a> 

मैंने पाया कि Chrome यह सामान्य रूप से और नहीं कर रही कुछ भी जब आप लिंक पर क्लिक करें, जबकि IE और Firefox एक रिक्त नए टैब को खोलने से निपटने है।

मेरा प्रश्न है, javascript:void(0) किसी लिंक से किसी भी क्लिक ईवेंट फायरिंग को रोकने के लिए नहीं है, भले ही यह नया टैब/विंडो लक्षित करता हो? और target="_blank" इसे क्यों पार कर रहा है? अगर मैं हूं, मान लें, कुछ बैकएंड भाषा के साथ href विशेषता भरने और मैं target="_blank" कठिन href विशेषता के बगल में कोडित पसंद करते हैं

इसके अलावा क्या सबसे अच्छा तरीका है?

+1

मैंने सोचा कि जावास्क्रिप्ट: शून्य (0); 'खराब अभ्यास माना जाता था। – j08691

+1

खाली एंकर टैग का उपयोग करने के लिए एक बेहतर तरीका नहीं होगा, इसके बजाय स्टाइल स्पैन का उपयोग करें। – tymeJV

+0

मेरा उत्तर कैसे उत्तर नहीं दिया? जो कोड मैंने प्रदान किया है वह वह करता है जो मुझे लगता है कि आप चाहते हैं - यह एक लिंक की तरह दिखता है, लेकिन कुछ भी नहीं जाता है। आपने सबसे अच्छा दृष्टिकोण मांगा, मैंने अपना सर्वश्रेष्ठ दृष्टिकोण दिया। – Zdenek

उत्तर

1
<a href=# onclick="return false;">I look like a link!</a> 

हमेशा इसका इस्तेमाल किया जाता है।

संपादित करें: शून्य (0) के बारे में आपके प्रश्न के लिए, ऑनक्लिक को href विशेषता से उच्च प्राथमिकता माना जाना चाहिए क्योंकि यह अमीर कार्यक्षमता प्रदान करता है और वास्तव में href को ऑपरेटिंग से रोकने की क्षमता है - इस प्रकार मेरा return false। अगर ऑनक्लिक घटना मौजूद है तो href केवल रोबोट और पुराने ब्राउज़र के लिए है।

इसके अलावा, क्या विचित्र रूप से गठित यूआरएल के साथ एक नियमित नेविगेशन किया जाता है ब्राउज़र के विवेकाधिकार पर। यदि लिंक हैश से शुरू होता है, तो उसे सिर्फ एक बुकमार्क पर जाना चाहिए। लेकिन जब यह खाली होता है या अन्य प्रोटोकॉल होते हैं, तो यह सभी ब्राउज़र पर निर्भर करता है यदि यह नए दस्तावेज़ को आजमाने और देखने का निर्णय लेता है। javascript: छद्म प्रोटोकॉल पारंपरिक रूप से बुकमार्कलेट जो वर्तमान पृष्ठ के साथ काम करने की उम्मीद कर रहे के लिए प्रयोग किया जाता है में प्रवेश कर, तो कुछ भी javascript: कि document.write() या अन्य विनाशकारी संशोधन नहीं करता है पेज unreloaded छोड़ देना चाहिए।

EDIT2: मुझे यकीन है कि आप href में बैकएंड भाषा से क्या मतलब है, लेकिन एचटीएमएल मान्य data- साथ अगर यह एक href विशेषता में तार्किक नहीं है काम करने के लिए अपने कोड कुछ देने के लिए जिम्मेदार बताते हैं पर विचार नहीं कर रहा हूँ।

+0

यह पोस्ट स्वचालित रूप से निम्न गुणवत्ता के रूप में फ़्लैग किया जा रहा है क्योंकि यह केवल कोड है। क्या आप यह समझाने के लिए कुछ पाठ जोड़कर इसे विस्तारित करना चाहते हैं कि यह समस्या को हल कैसे करता है? – gung

+1

उत्तर ने मेरी मदद की, यह खोज के लिए उत्तर नहीं दे सकता है, लेकिन जब हम Google में "जावास्क्रिप्ट: शून्य (0) खुला नया पृष्ठ" टाइप करते हैं, तो यह पृष्ठ मदद करता है! धन्यवाद –

0

मैंने सरल चाल का उपयोग करके इसे हल किया है। यह उपयोगी हो सकता है।

मैंने लिंक के आधार पर गतिशील रूप से लक्ष्य विशेषता को हटा दिया है। यानी यदि लिंक अपरिभाषित या खाली या जावास्क्रिप्ट है: शून्य (0), तो हम नीचे कोड का उपयोग करके लक्ष्य विशेषता को हटा देंगे।

यदि लिंक उचित है, तो हम उस हाइपर लिंक के लिए लक्ष्य विशेषता जोड़ देंगे ("स्थिति अगर दूसरा" ऐसा करेगा, क्योंकि मेरे पृष्ठ लिंक गतिशील हैं)।

मैंने नमूना HTML फ़ाइल (Test.html) की प्रतिलिपि बनाई है। यदि हम पृष्ठ के ऑनलोड पर विशेषता को हटाना चाहते हैं, तो इस फ़ाइल में स्क्रिप्ट कोड कॉपी करें और अपनी आवश्यक फ़ाइल के अंत में इसे पेस्ट करें।

यदि हम इसे गतिशील लिंक के लिए लागू करना चाहते हैं, तो हमें यह कोड एक फ़ंक्शन में रखना होगा और जब आवश्यक हो तो हम उसे कॉल कर सकते हैं।

यह कोड उस पृष्ठ के सभी हाइपर लिंक पर लागू होगा।हम कक्षा या किसी अन्य विशेषताओं का उपयोग कर लिंक के विशेष सेट पर सीमित कर सकते हैं।

Test.html 
--------- 

<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script> 
<a href="javascript:void(0);" target="_blank">Link1</a> 
<a href="javascript:void(0);" target="_blank">Link2</a> 
<a href="www.url1.com" target="_blank">Link3</a> 
<a href="www.url2.com" target="_blank">Link4</a> 

<script> 
$("a").each(function() { 

if(typeof(this.href) == 'undefined' || this.href == 'javascript:void(0);') { 
    $(this).attr('href', 'javascript:void(0);'); 
    $(this).removeAttr('target'); 
} 
if(typeof(this.href) != 'undefined' && this.href != 'javascript:void(0);') { 
    var s_link = this.href; 
    if (s_link.indexOf('http://') === -1 && s_link.indexOf('https://') === -1) { 
     s_link = 'https://' + s_link; 
    } 
    $(this).attr('href', s_link); 
    $(this).attr('target', '_blank'); 
} 

}); 
</script> 
संबंधित मुद्दे