尝试在使用preventDefault后启用链接

时间:2014-03-20 16:28:38

标签: javascript jquery preventdefault

我有一个文字链接"没有新通知"。以下代码用于使链接无法点击:

if ($.trim($('a#full_notifications_link').text()) == "No New Notifications"){
    $('a#full_notifications_link').click(function(){
        event.preventDefault();
        return false;
    });
}

我使用Ajax轮询服务器并更新文本。当文本更新为"查看所有通知"时,我希望链接变为可点击。我使用以下代码,但它无法正常工作。

$(document).ajaxComplete(function(){
    if ($.trim($('a#full_notifications_link').text()) == "See All Notifications"){
        $('a#full_notifications_link').click(function(){
            return true;
        });
    }
});

我知道这个问题与返回true有关,因为如果我在返回true之前在其中发出警报,则警报会起作用。不幸的是,该链接仍然无法点击。

我也无法更改任何html,因为后端每次都会生成不同的内容。

2 个答案:

答案 0 :(得分:1)

添加新的事件处理程序不会删除您已有的事件处理程序,因此仍会阻止默认操作。

使用on()off()代替

if ($.trim($('a#full_notifications_link').text()) == "No New Notifications"){

    $('a#full_notifications_link').on(function(event){
        event.preventDefault();
    });
}

$(document).ajaxComplete(function(){
    if ($.trim($('a#full_notifications_link').text()) == "See All Notifications"){

        $('a#full_notifications_link').off('click');

    }
});

检查事件处理程序中的文本似乎更容易

$('a#full_notifications_link').on('click', function(e) {
     if ( $.trim($(this).text())  == "No New Notifications"){
         e.preventDefault();
     }
});

答案 1 :(得分:0)

您可以将逻辑移到点击处理程序中吗?

$('a#full_notifications_link').click(function(evt){
    if($(this).text() == "No New Notifications") {
        evt.preventDefault();
    }
});