আপনি কোনও লিঙ্ক অক্ষম করতে পারবেন না (পোর্টেবল উপায়ে)। আপনি এই কৌশলগুলির একটি ব্যবহার করতে পারেন (প্রত্যেকে তার নিজস্ব সুবিধা এবং অসুবিধাগুলি সহ)।
সিএসএস উপায়
এই হওয়া উচিত সঠিক ভাবে (কিন্তু পরে দেখুন) তা করতে যখন ব্রাউজার সবচেয়ে এটিকে সমর্থন করে হবে:
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
একটি CSS ক্লাসের পরিবর্তে অ্যাট্রিবিউট? কড়া কথা বলতে disabled
সমর্থিত নয় <a>
তবে ব্রাউজারগুলি অজানা বৈশিষ্ট্যের জন্য অভিযোগ করবে না । আইবি disabled
বৈশিষ্ট্যটি ব্যবহার করা উপেক্ষা করবে pointer-events
তবে এটি আইই নির্দিষ্ট disabled
বৈশিষ্ট্যকে সম্মান করবে ; অন্যান্য সিএসএস অনুবর্তী ব্রাউজারগুলি অজানা disabled
বৈশিষ্ট্য এবং সম্মান উপেক্ষা করবে pointer-events
। লেখার চেয়ে বোঝা সহজ:
a[disabled] {
pointer-events: none;
}
আইই ১১ এর জন্য অন্য একটি বিকল্প হল 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
একটি JavaScript ফাংশন শর্তে (অথবা অক্ষম অ্যাট্রিবিউট নিজেই) জন্য চেক এবং কেস কিছুই না।
$("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
( undefined
অ্যাট্রিবিউট সেট না করা থাকলে jQuery 1.6+ সর্বদা ফিরে আসবে ) তবে is()
আরও পরিষ্কার (এই টিপটির জন্য ডেভ স্টুয়ার্টকে ধন্যবাদ)। এখানে লক্ষ্য করুন আমি ব্যবহার করছি দয়া করে disabled
কোনো অ-মানক ভাবে অ্যাট্রিবিউট, আপনি এই যত্নশীল তারপর একটি বর্গ সঙ্গে অ্যাট্রিবিউট প্রতিস্থাপন এবং প্রতিস্থাপন .is("[disabled]")
সঙ্গে .hasClass("disabled")
(যুক্ত করা এবং সঙ্গে সরানোর addClass()
এবং removeClass()
)।
জোল্টন তমাসি একটি মন্তব্যে উল্লেখ করেছেন যে "কিছু ক্ষেত্রে ক্লিক ইভেন্টটি ইতিমধ্যে কিছু" বাস্তব "ফাংশনে আবদ্ধ (উদাহরণস্বরূপ নকআউটজ ব্যবহার করে) সেক্ষেত্রে ইভেন্ট হ্যান্ডলারের ক্রম কিছু ঝামেলা সৃষ্টি করতে পারে Hence তাই আমি একটি ফেরত বেঁধে অক্ষম লিঙ্কগুলি প্রয়োগ করেছি লিংক এর মিথ্যা হ্যান্ডলার 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
বৈশিষ্ট্য যুক্ত করেছি যাতে আপনি নিম্নলিখিত সিএসএস বিধি ব্যবহার করতে পারেন:
a[disabled] {
color: gray;
}
আপনি যদি বৈশিষ্ট্যের পরিবর্তে কোনও ক্লাস ব্যবহার করছেন:
a.disabled {
color: gray;
}
আপনি যদি কোনও ইউআই কাঠামো ব্যবহার করছেন তবে আপনি দেখতে পাবেন অক্ষম লিঙ্কগুলি সঠিকভাবে স্টাইল করা হয়নি। উদাহরণস্বরূপ, বুটস্ট্র্যাপ 3.x, এই দৃশ্যটি পরিচালনা করে এবং বোতামটি যথাযথ disabled
বৈশিষ্ট্যযুক্ত এবং .disabled
শ্রেণি উভয়ই সঠিকভাবে স্টাইল করা হয়েছে । যদি পরিবর্তে, আপনি লিঙ্কটি সাফ করছেন (বা অন্যদের মধ্যে একটি জাভাস্ক্রিপ্ট কৌশল ব্যবহার করছেন) আপনাকে অবশ্যই স্টাইলিং পরিচালনা করতে হবে কারণ একটি <a>
ছাড়াhref
এখনও সক্ষম হিসাবে আঁকা হয়েছে।
অ্যাক্সেসযোগ্য সমৃদ্ধ ইন্টারনেট অ্যাপ্লিকেশন (এআরআইএ)
অ্যাট্রিবিউট / ক্লাসের aria-disabled="true"
সাথে একটি বৈশিষ্ট্যও একসাথে অন্তর্ভুক্ত করতে ভুলবেন না disabled
।