jQuery: Disable hyperlink
The simplest way to disable/enable a link by using jQuery is:
function DisableLinks(links) { links.attr('disabled', 'true'); } function EnableLinks(links) { links.removeAttr('disabled'); // or links.attr('disabled', 'false'); }
However, the ‘disabled‘-attribute is supported only by IE, and the given example won’t work, for instance, in Firefox.
To circumvent this problem I’d like to suggest the following code:
<head> <script type="text/javascript" src="jquery-1.6.2.js"></script> <style type="text/css"> .disabledLink { color: Gray; text-decoration: none; } </style> <script type="text/javascript"> function DisableLinks(links) { links.each( function(index, linkDomElement) { var link = $(linkDomElement); // get the 'href' and 'onclick' attribute values var linkHRef = link.attr('href'); var linkOnClick = link.attr('onclick'); // set the dummy attribute values link.attr('href', '#').attr('onclick', 'return false;'); // add a temporary attribute to keep the original 'href' value if (linkHRef != undefined) link.attr('tmphref', linkHRef); // add a temporary attribute to keep the original 'onclick' value if (linkOnClick != undefined) link.attr('tmponclick', linkOnClick); // add the class decorating disabled links link.addClass('disabledLink'); }); } function EnableLinks(links) { links.each( function(index, linkDomElement) { var link = $(linkDomElement); // get the original values of 'href' and 'onclick' attributes from temporary attributes var originalLinkHRef = link.attr('tmphref'); var originalLinkOnClick = link.attr('tmponclick'); // restore the original 'href' value if (originalLinkHRef != undefined) link.attr('href', originalLinkHRef); // restore the original 'onclick' value if (originalLinkOnClick != undefined) link.attr('onclick', originalLinkOnClick); // remove temporary attributes link.removeAttr('tmphref').removeAttr('tmponclick'); // remove the class decorating disabled links link.removeClass('disabledLink'); }); } </script> </head>
The methods DisableLinks and EnableLinks work successfully in different browsers. The css-class disabledLink allows to define the style of disabled link.
Below the sample of usage:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebForm1" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head> // the head is the same as it was in previous listing </head> <body> <a id="disableLinks" href="#" onclick="DisableLinks($('#linkDiv a')); $('#enableLinks').show(); $('#disableLinks').hide(); return false;">Disable the rest of links</a> <a id="enableLinks" style="display:none" href="#" onclick="EnableLinks($('#linkDiv a')); $('#enableLinks').hide(); $('#disableLinks').show(); return false;">Enable the rest of links</a> <br /> <br /> <br /> <div id="linkDiv"> <a href="http://google.com" onclick="alert('Transfer to www.google.com');">Goooogle</a> <br /> <a href="#" onclick="alert('Hello!'); return false;">Hello, alert!</a> <br /> </div> </body> </html>