попытка включить ссылку после использования protectDefault

0

У меня есть ссылка на текст "Нет новых уведомлений". Следующий код используется, чтобы сделать ссылку недоступной:

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, это будет срабатывать. К сожалению, ссылка по-прежнему не имеет значения.

Я также НЕ МОЖЕТ изменить любой из моих html, потому что он генерируется по-разному каждый раз с помощью бэкэнд.

Теги:
preventdefault

2 ответа

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();
     }
});
0

Не могли бы вы просто переместить свою логику в обработчик кликов?

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню