Антон В.
1807 сообщений
#14 лет назад
Народ, помогите, я в замыкании. Где-то жутко туплю, но не могу понять где.



Справа от селекта "все месяцы" иконка календаря. По нажатию на нее выпадает календарик. И все вроди хорошо, но при попытке переключить месяц или год стрелочками "туда-сюда" календарь пропадает. Сам факт переключения происходит, что видно, если еще раз ткнуть на иконку, но вот пропадать-то он не должен. Вот оригинал:


Консоль файрбага по клику выдает ошибку, но это ошибка другого плана, в скрипте cusel, там какая-то мелкая помарка, на работу календаря не влияет, проверял, удаляв скрипт cusel-а.

У кого есть идеи?
Евгений Б.
5330 сообщений
#14 лет назад
Clicked.parents(".cusel-scroll-wrap".find(".cuselActive".eq(0).removeClass("cuselActive".end().parents(".cusel-scroll-wrap".next().val(clicked.attr("value") is undefined

Line 27

поставьте FireFox и к нему плагин FireBug - он сразу показывает ошибку
Антон В.
1807 сообщений
#14 лет назад
Цитата ("nehovaysyatopol"):
Консоль файрбага по клику выдает ошибку, но это ошибка другого плана, в скрипте cusel, там какая-то мелкая помарка, на работу календаря не влияет, проверял, удаляв скрипт cusel-а.

ArtPro, как насчет читать внимательнее?

UPD. Пофиксил этот баг со скриптом CUSEL. Календарь все равно пропадает.
Дмитрий Засядько
87 сообщений
#14 лет назад
Сейчас событие click, произошедшее на каком либо из элементов в контейнере .date_selector всплывает за его пределы и доходит аж до body. А плагин то скорее всего постороен так, что при клике по body скрывает окно выбора даты. Из за чего это произошло, не совсем понятно. Можешь попробовать отключить вообще все скрипты кроме необходимых для запуска плагина и посмотреть, что получится. А можешь просто повесить на событие click для контейнера .date_selector функцию, останавливающую дальнейшее всплытие события.

upd.
$('.date_selector'.click( function(e) {
e.stopImmediatePropagation();
});
Этот кусок кода фиксит проблему.
Антон В.
1807 сообщений
#14 лет назад
Цитата ("segoddnja"):
Можешь попробовать отключить вообще все скрипты кроме необходимых для запуска плагина и посмотреть, что получится.


Пробовал, ничо не менялось...

Методом тыка нашел, что ошибка вот тут. Срабатывает это условие, и включается функция hide(). Строка 168.

hideIfClickOutside: function(event) {
if (event.target != this.input && !this.insideSelector(event)) {
this.hide();
};
},
Дмитрий Засядько
87 сообщений
#14 лет назад
Смотри выше.
Антон В.
1807 сообщений
#14 лет назад
О, щас попробую!

UPD. Ура, работает! Спасибо.

Правда все равно хочу разобраться, почему пропадает, ведь это все-таки "костыль", а не решение болезни...
И опять же, почему на демке работает без костылей?
Дмитрий Засядько
87 сообщений
#14 лет назад
Хитро как то сделано. По моему эффективнее просто не давать событиям внутри контейнера выходить за его границы.
Дмитрий Засядько
87 сообщений
#14 лет назад
Если интересно правильное решение болезни, попробуй у дива в твоей верстке с классом date_sector поменять имя класса на какое то другое. Дело в том, что плагин тоже создает элемент с таким же классом, из за этого видать и происходит сбой в функции insideSelector, которая определяет попадание клика в элемент, показывающий/скрывающий окно ввода даты.
Антон В.
1807 сообщений
#14 лет назад
Дык это он и содает, в моей верстке нету такого блока, просто инпут, а к нему уже привязывается все.