आप लिंक को अक्षम नहीं कर सकते (पोर्टेबल तरीके से)। आप इन तकनीकों में से किसी एक का उपयोग कर सकते हैं (प्रत्येक अपने स्वयं के लाभ और नुकसान के साथ)।
सीएसएस तरीका
यह सही तरीका होना चाहिए (लेकिन बाद में देखें) ऐसा करने के लिए जब अधिकांश ब्राउज़र इसका समर्थन करेंगे:
a.disabled {
pointer-events: none;
}
यह क्या है, उदाहरण के लिए, बूटस्ट्रैप 3.x करता है। वर्तमान में (2016) यह केवल क्रोम, फायरफॉक्स और ओपेरा (19+) द्वारा अच्छी तरह से समर्थित है। इंटरनेट एक्सप्लोरर ने संस्करण 11 से इसका समर्थन करना शुरू कर दिया, लेकिन लिंक के लिए नहीं, हालांकि यह बाहरी तत्व में उपलब्ध है जैसे:
span.disable-links {
pointer-events: none;
}
साथ में:
<span class="disable-links"><a href="#">...</a></span>
वैकल्पिक हल
हमें, शायद, के लिए एक सीएसएस वर्ग को परिभाषित करने की आवश्यकता है pointer-events: none
लेकिन क्या होगा अगर हम सीएसएस वर्ग के बजाय विशेषता का पुन: उपयोग करते हैं disabled
? कड़ाई से बोलने के disabled
लिए समर्थित नहीं है, <a>
लेकिन ब्राउज़र अज्ञात विशेषताओं के लिए शिकायत नहीं करेंगे । disabled
विशेषता IE का उपयोग करना अनदेखा करेगा, pointer-events
लेकिन यह IE विशिष्ट disabled
विशेषता का सम्मान करेगा ; अन्य CSS अनुरूप ब्राउज़र अज्ञात disabled
विशेषता और सम्मान को अनदेखा करेंगे pointer-events
। समझाने की तुलना में लिखने में आसान:
a[disabled] {
pointer-events: none;
}
IE 11 के लिए एक अन्य विकल्प display
लिंक तत्वों के समूह को block
या inline-block
:
<a style="pointer-events: none; display: inline-block;" href="#">...</a>
ध्यान दें कि यह एक पोर्टेबल समाधान हो सकता है यदि आपको IE का समर्थन करने की आवश्यकता है (और आप अपना HTML बदल सकते हैं) लेकिन ...
यह सब कहा कृपया ध्यान दें कि pointer-events
केवल ... सूचक घटनाओं को निष्क्रिय करता है। लिंक अभी भी कीबोर्ड के माध्यम से नेविगेट करने योग्य होंगे फिर आपको यहां वर्णित अन्य तकनीकों में से एक को लागू करने की भी आवश्यकता है।
फोकस
ऊपर वर्णित सीएसएस तकनीक के साथ संयोजन में आप tabindex
एक गैर-मानक तरीके से ध्यान केंद्रित करने के लिए एक तत्व को रोकने के लिए उपयोग कर सकते हैं :
<a href="#" disabled tabindex="-1">...</a>
मैंने कभी भी कई ब्राउज़रों के साथ इसकी संगतता की जाँच नहीं की है, तो आप इसे उपयोग करने से पहले अपने आप से परीक्षण करना चाह सकते हैं। यह जावास्क्रिप्ट के बिना काम करने के लिए लाभ है। दुर्भाग्य से (लेकिन जाहिर है) tabindex
सीएसएस से नहीं बदला जा सकता है।
अवरोधन क्लिक
href
जावास्क्रिप्ट फ़ंक्शन का उपयोग करें , स्थिति की जांच करें (या स्वयं अक्षम विशेषता) और मामले में कुछ भी न करें।
$("td > a").on("click", function(event){
if ($(this).is("[disabled]")) {
event.preventDefault();
}
});
लिंक को अक्षम करने के लिए ऐसा करें:
$("td > a").attr("disabled", "disabled");
उन्हें फिर से सक्षम करने के लिए:
$("td > a").removeAttr("disabled");
यदि आप इसके बजाय चाहते हैं तो आप .is("[disabled]")
उपयोग कर सकते हैं .attr("disabled") != undefined
(jQuery 1.6+ हमेशा वापस आ जाएगा undefined
जब विशेषता सेट नहीं होती है) लेकिन is()
बहुत अधिक स्पष्ट है (इस टिप के लिए डेव स्टीवर्ट के लिए धन्यवाद)। यहाँ ध्यान दें मैं उपयोग कर रहा हूँ कृपया disabled
एक गैर मानक रास्ते में विशेषता, अगर आप इस बारे में परवाह है तो एक वर्ग के साथ विशेषता की जगह और की जगह .is("[disabled]")
के साथ .hasClass("disabled")
(जोड़ने और साथ दूर करने addClass()
और removeClass()
)।
Zoltán Tamási ने एक टिप्पणी में कहा कि "कुछ मामलों में क्लिक इवेंट पहले से ही कुछ" वास्तविक "फ़ंक्शन (उदाहरण के लिए नॉकआउट) का उपयोग करने के लिए बाध्य है, उस स्थिति में ईवेंट हैंडलर ऑर्डरिंग कुछ परेशानियों का कारण बन सकता है। इसलिए मैंने वापसी के लिए बाध्य लिंक के साथ अक्षम लिंक लागू किए। लिंक के लिए झूठी हैंडलर touchstart
, mousedown
और keydown
घटनाओं। यह कुछ कमियां हैं (यह स्पर्श लिंक पर शुरू कर दिया स्क्रॉल कर पाएगा) " लेकिन कुंजीपटल की घटनाओं से निपटने के भी लाभ कीबोर्ड नेविगेशन को रोकने के लिए है।
ध्यान दें कि यदि href
साफ़ नहीं किया गया है तो उपयोगकर्ता के लिए उस पृष्ठ को मैन्युअल रूप से देखना संभव है।
लिंक साफ़ करें
href
विशेषता साफ़ करें । इस कोड के साथ आप एक ईवेंट हैंडलर नहीं जोड़ते हैं लेकिन आप लिंक को ही बदल देते हैं। लिंक को अक्षम करने के लिए इस कोड का उपयोग करें:
$("td > a").each(function() {
this.data("href", this.attr("href"))
.attr("href", "javascript:void(0)")
.attr("disabled", "disabled");
});
और यह एक उन्हें फिर से सक्षम करने के लिए:
$("td > a").each(function() {
this.attr("href", this.data("href")).removeAttr("disabled");
});
व्यक्तिगत रूप से मुझे यह समाधान बहुत पसंद नहीं है (यदि आपको अक्षम लिंक के साथ अधिक नहीं करना है) लेकिन लिंक का पालन करने के विभिन्न तरीकों के कारण यह अधिक संगत हो सकता है।
नकली क्लिक हैंडलर
एक onclick
फ़ंक्शन जोड़ें / निकालें जहां आप return false
, लिंक का पालन नहीं किया जाएगा। लिंक अक्षम करने के लिए:
$("td > a").attr("disabled", "disabled").on("click", function() {
return false;
});
उन्हें फिर से सक्षम करने के लिए:
$("td > a").removeAttr("disabled").off("click");
मुझे नहीं लगता कि पहले वाले के बजाय इस समाधान को पसंद करने का एक कारण है।
स्टाइलिंग
स्टाइलिंग और भी सरल है, जो भी समाधान आप लिंक को निष्क्रिय करने के लिए उपयोग कर रहे हैं वह हमने एक disabled
विशेषता जोड़ दिया है ताकि आप CSS नियम का उपयोग कर सकें:
a[disabled] {
color: gray;
}
यदि आप विशेषता के बजाय कक्षा का उपयोग कर रहे हैं:
a.disabled {
color: gray;
}
यदि आप UI फ्रेमवर्क का उपयोग कर रहे हैं, तो आप देख सकते हैं कि अक्षम लिंक ठीक से स्टाइल नहीं किए गए हैं। उदाहरण के लिए, बूटस्ट्रैप 3.x, इस परिदृश्य को संभालता है और बटन को disabled
विशेषता के साथ और .disabled
वर्ग के साथ सही ढंग से स्टाइल किया गया है । यदि, इसके बजाय, आप लिंक को साफ़ कर रहे हैं (या किसी अन्य जावास्क्रिप्ट तकनीक का उपयोग कर रहे हैं) तो आपको स्टाइल को भी संभालना होगा क्योंकि इसके <a>
बिना href
अभी भी पेंट नहीं किया गया है।
सुलभ रिच इंटरनेट एप्लिकेशन (ARIA)
विशेषता / वर्ग के aria-disabled="true"
साथ एक विशेषता को भी शामिल करना न भूलें disabled
।