У меня есть ссылка на текст "Нет новых уведомлений". Следующий код используется, чтобы сделать ссылку недоступной:
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, потому что он генерируется по-разному каждый раз с помощью бэкэнд.
Добавление нового обработчика событий не удаляет обработчики событий, которые у вас уже есть, поэтому действие по умолчанию все еще запрещено.
Используйте вместо 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();
}
});
Не могли бы вы просто переместить свою логику в обработчик кликов?
$('a#full_notifications_link').click(function(evt){
if($(this).text() == "No New Notifications") {
evt.preventDefault();
}
});