Почему клик не срабатывает больше одного раза?

Функция на клике по a.ui-state-default срабатывает только раз. Не могу понять, почему
$(document).ready(function () {
    $( "#datepicker" ).datepicker({
        altField: ".date_picker input",
        firstDay: 1,
        altFormat: "dd-mm-yy",
        dayNames: [ "Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота" ],
        dayNamesMin: [ "Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб" ],
        monthNames: [ "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь" ]
    });
    $('.ui-datepicker td ').on('click', '.ui-state-default', function () {
        alert();
        $('.time_picker .time_item').removeClass('busy');
        $.getJSON('/data.json', function(data) {
            $.each(data, function (key, val) {
                if (val.date == $('.date_picker input').val()) {
                    $('.time_picker p span').each(function () {
                        if ($(this).text() == val.time) {
                            if ($(this).hasClass('active_time_item')) {
                                $(this).removeClass('active_time_item');
                                alert("Выбранное время занято!");
                            }
                            $(this).addClass('busy');
                        }
                    });
                }
            });
        });
    });
  • Вопрос задан
  • 1729 просмотров
Решения вопроса 1
Petroveg
@Petroveg
Миром правят маленькие с#@&ки
Во-первых, прислушайтесь к совету, что дал Роман, и сделайте так:

$(document).on('click', '.ui-datepicker .ui-state-default', function () {...});

Во-вторых, если после первого раза перестаёт срабатывать, то нужно смотреть на элемент .ui-state-default в консоли и наблюдать, что с ним происходит после клика. Мне кажется, вполне очевидно, что такого класса больше нет.

Update
Если в найденных ячейках событие срабатывает 1 раз, а попытка поймать его в document не венчается успехом, какой вывод следует?
Очевидно, что:
— после выбора даты таблица перерисовывается полностью
— всплытие события принудительно останавливают где-то в пределах элемента с инициализацией календаря

Как поступить в таком случае?

1. Можно вспомнить про первую фазу распространения события и написать примерно такое для борьбы с любителями preventDefault

document.addEventListener('click', function (e) {
	var target = $(e.target).closest('.ui-state-default');

	if (target.length) {
		...
	}
}, true);

2. А можно (и это правильный способ), почитать API того плагина, что вы используете, и найти там вот такую штуку:

$('#datepicker').datepicker({
	onSelect: function () {
		...
	}
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Deimosss88
@Deimosss88 Автор вопроса
Евгений Петров:
клик по одному из нескольких одинаковых элементов
<td class=" " data-handler="selectDay" data-event="click" data-month="3" data-year="2015"><a class="ui-state-default" href="#">20</a></td>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы