如何使用jQuery启用或禁用锚点?

如何使用jQuery启用或禁用锚点?

为了防止锚点遵循指定的href ,我build议使用preventDefault()

 // jQuery 1.7+ $(function () { $('a.something').on("click", function (e) { e.preventDefault(); }); }); // jQuery < 1.7 $(function () { $('a.something').click(function (e) { e.preventDefault(); }); // or $('a.something').bind("click", function (e) { e.preventDefault(); }); }); 

看到:

http://docs.jquery.com/Events/jQuery.Event#event.preventDefault.28.29

另请参阅上一个关于SO的问题:

jQuery禁用链接

我目前正在处理的应用程序是通过与javascript结合使用CSS样式的。

 a.disabled { color:gray; } 

然后,每当我想禁用我打电话的链接

 $('thelink').addClass('disabled'); 

然后,在'thelink'的点击处理程序中,我总是首先运行一个检查

 if ($('thelink').hasClass('disabled')) return; 

我在这里find了一个我更喜欢的答案

看起来像这样:

 $(document).ready(function(){ $("a").click(function () { $(this).fadeTo("fast", .5).removeAttr("href"); }); }); 

启用将涉及设置href属性

 $(document).ready(function(){ $("a").click(function () { $(this).fadeIn("fast").attr("href", "http://whatever.com/wherever.html"); }); }); 

这给你看起来,锚元素成为正常的文字,反之亦然。

我认为一个更好的解决scheme是设置禁用的数据属性,并锚点检查它点击。 这样,我们可以暂时禁用锚点,直到例如JavaScript完成了Ajax调用或一些计算。 如果我们不禁用它,那么我们可以快速点击它几次,这是不可取的… … –

 $('a').live('click', function () { var anchor = $(this); if (anchor.data("disabled")) { return false; } anchor.data("disabled", "disabled"); $.ajax({ url: url, data: data, cache: false, success: function (json) { // when it's done, we enable the anchor again anchor.removeData("disabled"); }, error: function () { // there was an error, enable the anchor anchor.removeData("disabled"); } }); return false; }); 

我做了一个jsfiddle的例子: http : //jsfiddle.net/wgZ59/76/

 $("a").click(function(){ alert('disabled'); return false; }); 

这就像返回false一样简单;

恩。

 jQuery("li a:eq(0)").click(function(){ return false; }) 

要么

 jQuery("#menu a").click(function(){ return false; }) 
 $('#divID').addClass('disabledAnchor'); 

在css文件中

 .disabledAnchor a{ pointer-events: none !important; cursor: default; color:white; } 
 $("a").click(function(event) { event.preventDefault(); }); 

如果调用此方法,则不会触发事件的默认操作。

尝试下面的行

 $("#yourbuttonid").attr("disabled", "disabled"); $("#yourbuttonid").removeAttr("href"); 

因为,即使你禁用<a>标签href将工作,所以你也必须删除href

当你想启用下面的行

 $("#yourbuttonid").removeAttr("disabled"); $("#yourbuttonid").attr("href", "#nav-panel"); 

select的答案不好。

使用指针事件的 CSS样式。 (正如拉沙德·安娜拉所说)

请参阅MDN https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events 。 它在大多数浏览器中都支持。

如果你有像下面这样的全局CSS规则,简单地添加“禁用”属性到锚点将完成这项工作:

 a[disabled], a[disabled]:hover { pointer-events: none; color: #e1e1e1; } 

如果您试图阻止与页面的所有交互,您可能需要查看jQuery BlockUI插件

你从来没有真正指定你想要他们禁用,或者什么会导致禁用。

首先,你想知道如何设置这个值为禁用,因为你会使用JQuery的属性函数 ,并且该函数发生在一个事件上 ,比如点击或者文档的加载 。

对于必须将文本或HTML内容放在锚标记中的情况,您完全不希望在单击该元素时采取任何操作(例如,您希望分页程序链接处于禁用状态,因为它是当前页面),只需剪掉href。 ;)

 <a>3 (current page, I'm totally disabled!)</a> 

@ michael-meadows的回答让我意识到这一点,但是他仍然在解决你仍然需要使用jQuery / JS的场景。 在这种情况下, 如果您可以控制编写html本身,只需简单地将href标记为x就可以了,所以解决scheme是纯HTML的!

没有jQuery的其他解决scheme保持href要求你把一个#在href,但这会导致页面反弹到顶端,你只是希望它是普通的旧的禁用。 或者把它留空,但是根据浏览器的不同,它仍然会跳转到顶部,而根据IDE,它是无效的HTML。 但显然a标签是完全有效的HTML没有HREF。

最后,你可能会说:好的,为什么不把一个标签全部转储? 因为通常你不能这样做,所以在CSS框架或者你正在使用的控件(比如Bootstrap的分页器)中使用a标签进行样式devise:

http://twitter.github.io/bootstrap/components.html#pagination

所以结合上面的回答,我想出了这个。

 a.disabled { color: #555555; cursor: default; text-decoration: none; } $(".yourClass").addClass("disabled").click(function(e){ e.preventDefault(); 

如果你不需要它作为一个锚标签,那么我宁愿replace它。 例如,如果你的锚标签是

 <a class="MyLink" href="http://www.google.com"><span>My</span> <strong>Link</strong></a> 

然后使用jQuery你可以做到这一点,当你需要显示文本,而不是一个链接。

 var content = $(".MyLink").text(); // or .html() $(".MyLink").replaceWith("<div>" + content + "</div>") 

所以这样,我们可以简单地用一个div标签replace锚标签。 这很容易(只有2行),语义上也是正确的(因为我们现在不需要链接,所以不应该有链接)

禁用或启用具有禁用属性的任何元素。

 // Disable $("#myAnchor").prop( "disabled", true ); // Enable $( "#myAnchor" ).prop( "disabled", false );