2015-12-22 76 views
-2

我试着如果某些条件下使用,如果在jquery.I statment已经看过其他问题,并尝试这些解决禁止使用jQuery的链接无法正常工作

if (discussionPointsSize == 0) { 
    $('#discussionPointsLink').preventDefault(); 
    $('#discussionPointsLink').bind('click', false); 
    $('#discussionPointsLink').click(function() { 
    return false; 
    }); 
    $('#discussionPointsLink').data('disabled()') 
    $('#discussionPointsLink').click(function() { 
    return ($(this).attr('disabled')) ? false : true; 
    }); 
    $('#discussionPointsLink').click(function(e) { 
    e.preventDefault(); 
    //do other stuff when a click happens 
    }); 
} 

但所有遇到检查,以禁用链接上面的解决方案不禁用链接。只是为了确保我尝试了.hide()并且链接被隐藏了,这意味着我正在访问链接right.so任何人都可以告诉我该怎么办?

+2

究竟你*禁用的意思* ..?你想阻止它执行附加的功能,或改变它的外观,或两者兼而有之。 –

+0

我依靠不明白为什么我得到了对这个问题的投票。清楚而不重复。 – robel

回答

5

这里你应该在CSS尝试pointer-events: none;。如果条件成立,我们将为其添加类disable-this。如果没有,我们将删除类disable-this

if (discussionPointsSize == 0) { 
    $('#discussionPointsLink').addClass('disable-this'); 
} else { 
    $('#discussionPointsLink').removeClass('disable-this'); 
} 

我们将定义disable-this类这样

.disable-this{ 
    pointer-events: none; 
    } 

或者你应该做这样的,如果你不希望任何东西添加到您的CSS文件

if (discussionPointsSize == 0) { 
    $('#discussionPointsLink').css({'pointer-events': 'none'}); 
} else { 
    $('#discussionPointsLink').css({'pointer-events': 'inherit'}); 
} 
+0

是的,它会工作,但看起来并不漂亮。让我们保留事件'css' – Rayon

+0

第二条语句在指针事件上有问题:因为它找不到它,但第一条语句完美无缺。感谢 – robel

+1

是的。我忘记把指针事件放在单引号中。现在它工作了! –

0

你可以使用这个。如果你想禁用它的功能。

$('.my-link').click(function (e) {e.preventDefault();return false;}); 
+1

添加e.preventDefault()以及:) – vivid

+0

它不会禁用任何东西。 – dfsq

+0

我已经说过,这不起作用,因为它在我的代码中明确指定了 – robel

0

试试这个

$(this).attr('href',"#") 

它不会进行点击,你应该改变颜色以灰色

0

这是正确的做法:

$('#discussionPointsLink').click(function(e) { 
    if(discussionPointsSize == 0){ 
     e.preventDefault(); 
    }else{ 
     //do other stuff when a click happens 
    } 
    }); 

我猜测你正试图解除绑定点击处理程序来执行代码,如果是这种情况,那么你可以使用.off(),但你需要将事件与.on()绑定:

if(discussionPointsSize == 0){ 
    $('#discussionPointsLink').off(); 
} 
+1

因为这是一个'anchor'标签并且'click'处理程序用在它上面,所以'e.preventDefault();'应该始终存在,而不管条件。人们可以使用条件做其余的事情。 – Rayon

+0

@RayonDabre我觉得我实际上回答了一个错误的问题。 – Jai

+1

其实:P我期待在问题下面有很多评论,但他们中的很多人首选回答它,然后才知道这个问题。 – Rayon

0

试试这个.....

if (discussionPointsSize == 0) { 
     $('#discussionPointsLink').attr("href","javascript:void(0);"); 
} 
0

这将禁用链接并将其设置为纯文本,如果条件变为false,则会再次使其成为链接。

$(function() { 
 
    $(".anylink").click(function(e) { 
 
    var discussionPointsSize = 0; 
 
    if (discussionPointsSize == 0) { 
 
     e.preventDefault(); 
 
     this.disabled=true; 
 
     $(this).attr("data-href", this.href); // Saving it if you want to regenrate a link. 
 
     this.removeAttribute('href');  
 
     this.style.textDecoration = 'none'; 
 
     this.style.cursor = 'default'; 
 
     return false; 
 
    } 
 
    else{ 
 
     this.disabled=false; 
 
     //assign href dynamically 
 
     this.href = $(this).data("href"); 
 
     this.style.textDecoration = "underline"; 
 
     this.style.cursor = "hand"; 
 
    } 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<a href="http://example.com" data-href="http://example.com" target="_blank" class="anylink">Yo, Click Me</a>

0

我觉得有很多的方式来解决它,我的解决办法是添加属性“禁用”,并“的preventDefault()”,一个有些“CSS “代码象下面这样:

HTML

<a id="a1" href="http://vnlives.net">vnlives.net</a> | 
<a id="a2" href="http://www.google.com">Google</a> 

JAVASCRIPT

$('#a1').attr('disabled', 'disabled').css("color","#ccc"); 

$('a').live('click', function(e) { 
    if ($(this).attr('disabled') == 'disabled') { 
     e.preventDefault(); 
    } 
}); 

DEMO:https://jsfiddle.net/bnson/7hzvvwp8/3/

注:使用jQuery 1.7.2