У меня есть календарь ajax, который меняет месяц при нажатии некоторых стрелок. По какой-то причине событие click не работает в методе live(). Раньше работало, а сейчас почему-то нет.
Если я заменю live() на click(), он сработает, но мне нужен метод live().
Предположения
- Я использую последнюю версию jQuery.
- Ошибки JS не выдаются.
- HTML действителен
- Идет поиск селектора a.x-btn (длина = 2)
- console.log('Зашли так далеко!') срабатывает правильно.
- console.log('Sidebar Cal Clicked') не срабатывает вообще.
- Запуск в среде Wordpress.
- DOCTYPE установлен для HTML5
//ajax calendars
jQuery(document).ready(function($) {
//sidebar
$(function() {
var s = $('#s-calendar'), p = s.closest('.widget');
console.log('Got this far!');
//prevent collapse
p.css('min-height', p.height());
s.find('a.x-btn').live('click', function(e) {
console.log('Sidebar Cal Clicked');
var d = $(this).attr('data-cal-date'), n = $(this).attr('data-nonce');
var url = $(this).attr('data-ajaxurl');
$.ajax({
url:url,
type:'POST',
data:'action=wpcal&sidebar=true&_wpcal_nonce='+n+'&date='+d,
success:function(data) {
s.fadeOut(500, function() {
s.html(data).fadeIn(500);
});
}
});
return false;
});
});
});
ОТВЕТ
Выяснилось, что из-за другой части JS трансляция не работала. Метод live() требует распространения событий для правильной работы. У меня была небольшая строка JS в верхней части моего кода, которую я иногда нахожу полезной.
$('body a[href=#]').click(function(event) { event.preventDefault(); });
Я использую этот код, чтобы страница не прыгала при переходе по бесполезным ссылкам. Это завершает распространение всех тегов «A», которые имеют href="#" при нажатии. Я удалил его, и все работает нормально.
Кроме того, несмотря на то, что говорят документы jQuery, используя jQuery 1.5.2, метод live() работает после обхода DOM. Я пошел дальше и все равно изменил его, просто чтобы соответствовать документации. Но это работает! Спасибо за помощь, ребята!