jQuery - 禁用点击

51
我只想禁用用户在某些条件下单击元素的能力。以下是我正在使用的一些代码:
     $('#navigation a').bind('click',function(e){

    var $this   = $(this);
    var prev    = current;

    current = $this.parent().index() + 1; // store the position in current

    if (current == 1){
    $("#navigation a:eq(1)").unbind("click"); // i want to disable the ability to click this element if current is 1
    }
    if (current >= 2){
    $("#navigation a:eq(1)").bind("click"); // this is wrong, but I want to rebind the click if current is greater than 1.  
    }

}


$('selector').prop("disabled", true); - vishalknishad
7个回答

104

如果你正在使用 jQuery 1.4.3 版本及以上:

$('selector').click(false);
如果不是这样:
$('selector').click(function(){return false;});

27
有没有一种方法可以切换禁用点击功能而不是重新定义它? - Gaʀʀʏ

27
假设你正在使用点击事件,只需解除那个事件的绑定即可。
例如:
if (current = 1){ 
    $('li:eq(2)').unbind("click");
}

编辑: 您是否已经在某个地方将点击事件绑定到了列表上?根据您上面的评论,我想知道这是否是您正在做的事情?您是如何启用点击事件的?它只是一个锚点(<a>标记)吗?更明确的信息将有助于我们回答您的问题。

更新:

使用:eq()运算符进行了一些尝试。 http://jsfiddle.net/ehudokai/VRGfS/5/

正如我所预料的那样,它是一个基于0的索引运算符。因此,如果您想关闭选择中的第二个元素,其中选择为

$("#navigation a")

你只需要添加:eq(1)(第二个索引),然后 .unbind("click"),所以:

if(current == 1){
    $("#navigation a:eq(1)").unbind("click");
}

应该可以解决问题。

希望这可以帮到你!


我正在以以下方式绑定点击事件:$('#navigation a').bind('click',function(e){ 因此,我正在使用<a>标签。 - scifirocket
哦,好的,这帮了很多。我认为它实际上就像在选择器上添加'a'一样简单。所以:$('#navigation li:eq(2) a').unbind('click'); - ehudokai
@scifirocket:当然我错了,但是如果你看到我上面的更新,我测试过这个答案 :)。 - ehudokai
现在我已经解除了当前为1的点击绑定,否则我该如何重新绑定点击。我知道这不像$("#navigation a:eq(1)").bind("click");那么简单。 - scifirocket
重新绑定请使用 $("#navigation a:eq(1)").bind("click", function(){//yourcode}); - ehudokai

10

原生JavaScript也可以快速实现相同的功能:

document.getElementById("myElement").onclick = function() { return false; } 

2
我认为这是一个打字错误,所以我在jQuery选择器中添加了“#” ;) - David Tang
虽然...但是在 jQuery 对象上使用 .onclick 也不起作用。你需要使用 [0] 或者 .get(0) - David Tang

6
您可以使用unbind方法来删除已附加的处理程序...
if (current = 1){ 
   $('li:eq(2)').unbind('click');
}

您可以查看unbind函数的作用?Unbind手册


实际上,我可能需要使用类似这样的代码:$('#navigation li:eq(2)').unbind('click'); 但是这也没有起作用。我正在尝试禁用列表中特定元素的点击事件。 - scifirocket
@scifirocket:你在代码中绑定了一个点击事件吗?还是你只是想禁用一个锚点? - ehudokai

2

在点击事件被触发后使用 off() 方法来禁用元素,以防止进一步的点击。

$('#clickElement').off('click');

0

我使用了.prop('disabled', true)并且它非常好用,没有重新定义,很简单。

由于它与Bootstrap Dropdown的prop产生干扰,所以必须将其超时设置为125ms。


0

/** eworkyou **//

$('#navigation a').bind('click',function(e){

    var $this   = $(this);
    var prev    = current;

    current = $this.parent().index() + 1; //

    if (current == 1){
    $("#navigation a:eq(1)").unbind("click"); // 
    }
    if (current >= 2){
    $("#navigation a:eq(1)").bind("click"); // 
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接