如何使用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 );