如何使用jQuery启用或禁用锚点?
答案 0 :(得分:192)
为防止锚点跟踪指定的href
,我建议您使用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上的上一个问题:
答案 1 :(得分:113)
我正在处理的应用程序使用CSS样式与javascript结合使用。
a.disabled { color:gray; }
然后每当我想要禁用链接时,我都会调用
$('thelink').addClass('disabled');
然后,在'thelink'的点击处理程序中,我总是首先运行检查
if ($('thelink').hasClass('disabled')) return;
答案 2 :(得分:40)
我找到了一个我更喜欢的答案here
看起来像这样:
$(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");
});
});
这使您看起来锚元素成为普通文本,反之亦然。
答案 3 :(得分:12)
$("a").click(function(){
alert('disabled');
return false;
});
答案 4 :(得分:12)
我认为更好的解决方案是设置禁用数据属性并在点击时锚定检查。这样我们可以暂时禁用锚点,直到例如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/
答案 5 :(得分:8)
就像return false一样简单;
离。
jQuery("li a:eq(0)").click(function(){
return false;
})
或
jQuery("#menu a").click(function(){
return false;
})
答案 6 :(得分:8)
尝试以下行
$("#yourbuttonid").attr("disabled", "disabled");
$("#yourbuttonid").removeAttr("href");
Coz,即使您停用<a>
代码href
也行,所以您也必须删除href
。
如果您想要启用,请尝试以下行
$("#yourbuttonid").removeAttr("disabled");
$("#yourbuttonid").attr("href", "#nav-panel");
答案 7 :(得分:8)
选择的答案不好。
使用指针事件 CSS样式。 (正如Rashad Annara建议的那样)
请参阅MDN https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events。 它在大多数浏览器中都受支持。
如果你有如下全局CSS规则,那么简单地向锚点添加“disabled”属性就可以完成这项工作:
a[disabled], a[disabled]:hover {
pointer-events: none;
color: #e1e1e1;
}
答案 8 :(得分:7)
$('#divID').addClass('disabledAnchor');
在css文件中
.disabledAnchor a{
pointer-events: none !important;
cursor: default;
color:white;
}
答案 9 :(得分:5)
$("a").click(function(event) {
event.preventDefault();
});
如果调用此方法,则不会触发事件的默认操作。
答案 10 :(得分:4)
如果您尝试阻止与该网页的所有互动,您可能需要查看jQuery BlockUI Plugin
答案 11 :(得分:4)
您从未真正指定过如何禁用它们,或者什么会导致禁用。
首先,您想弄清楚如何将值设置为已禁用,因为您将使用JQuery's Attribute Functions,并在event上执行该功能,如click,或文件的loading。
答案 12 :(得分:1)
对于必须在锚标记中放置text或html内容的情况,但是在单击该元素时根本不希望采取任何操作(例如,当您希望paginator链接处于禁用状态时)状态,因为它是当前页面),只需剪切href。 ;)
<a>3 (current page, I'm totally disabled!)</a>
@ michael-meadows给出的回答让我想到了这一点,但是他仍然在解决你仍然需要/正在使用jQuery / JS的场景。在这种情况下,如果你可以控制编写html本身,只需x-ing href标签就可以了,所以解决方案是一个纯HTML的解决方案!
没有jQuery finagling的其他解决方案保持href要求你在href中放置一个#,但这会导致页面反弹到顶部,你只是希望它是普通的旧禁用。或者将它留空,但取决于浏览器,仍然会像跳转到顶部那样,并且根据IDE,它是无效的HTML。但显然a
标签是没有HREF的完全有效的HTML。
最后,你可能会说:好吧,为什么不直接转储一个标签呢?因为通常你不能,a
标签用于CSS框架中的样式设置或你正在使用的控件,比如Bootstrap的paginator:
http://twitter.github.io/bootstrap/components.html#pagination
答案 13 :(得分:1)
所以结合上面的回答,我想出了这个。
a.disabled { color: #555555; cursor: default; text-decoration: none; }
$(".yourClass").addClass("disabled").click(function(e){ e.preventDefault();
答案 14 :(得分:0)
如果你不需要它作为锚标记,那么我宁愿更换它。例如 如果你的锚标签是
<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标签替换anchor标签。这更容易(只有2行)和语义正确(因为我们现在不需要链接,因此不应该有链接)
答案 15 :(得分:0)
禁用或启用具有禁用属性的任何元素。
// Disable
$("#myAnchor").prop( "disabled", true );
// Enable
$( "#myAnchor" ).prop( "disabled", false );