JQuery live() не работает с jQuery UI datepicker

Хорошо, я пытаюсь использовать плагин FaceBox() для jQuery вместе с jQuery UI datepicker().

У меня есть привязка к входам lightbox'd при первом появлении лайтбокса, но он не работает впоследствии.

Я делаю следующее:


$(function() { 
    $('.jQueryCalendar').live('click', function () {
            $(this).datepicker({showOn: 'both'}).focus();
    });
});

Когда лайтбокс закрывается, я повторно добавляю его содержимое на страницу (чтобы не потерять содержимое div), и это, кажется, убивает вызов live(). [NB повторное добавление происходит после уничтожения исходного содержимого]

ИЗМЕНИТЬ

Хорошо, событие live() запускает событие IS (спасибо Nick Craver за это), однако datepicker больше не отображается. Кто-нибудь есть идея, почему?

ИЗМЕНИТЬ № 2

Хорошо, использование .html() для повторного добавления приводит к необходимости перезаписи событий, но у элемента, которому требуется привязка, есть класс hasDatepicker, который беспорядочен с инициализацией datepicker().

Чтобы исправить, просто пользователь


$(this).removeClass('hasDatepicker') .datepicker({showOn: 'both'}).focus();

Ответы

Ответ 1

Попробуйте это и посмотрите, что произойдет:

$(function() { 
    $('.jQueryCalendar').live('click', function () {
            $(this).datepicker('destroy').datepicker({showOn: 'both'}).focus();
    });
});

Если вы используете jQuery UI 1.7.2 с jQuery 1.4, некоторые эффекты уничтожают виджеты, они исчезают и т.д. могут вызывать проблемы с дампикером. jQuery UI 1.8 исправляет это, он в состоянии RC3 на данный момент.

Ответ 2

$(this).removeClass('hasDatepicker') .datepicker({showOn: 'both'}).focus();

решил мою проблему

спасибо!

Ответ 3

это сработало для меня

$.datepicker.setDefaults({ dateFormat: 'yy-mm-dd', ... });
$('input.date').live('focus', function() {
 $(this).datepicker().datepicker('show');
 true;
});

Ответ 4

Это сработало для меня:

$('.datepicker').live('mousedown', function(){
  $(this).datepicker({
    dateFormat: 'mm/dd/y
  });
});

Не так, как .live() был удален из jQuery с 1.9 и должен быть заменен на .on(). Используя новый синтаксис, вы получите:

$(document).on('mousedown', '.datepicker', function(){
  $(this).datepicker({
    dateFormat: 'mm/dd/y
  });
});

Ответ 5

возможно, что datepicker находится за коробкой...

У меня также была та же проблема, что и раньше.

поместите это в файл css, и это сделало трюк для меня.

#ui-datepicker-div
{
    z-index:9999999;
}

Ответ 6

$( "#datepicker" ).live('mousedown',function()
{
$(this).datepicker({ 
dateFormat: 'dd/mm/yy',
minDate: 0
});     
});

Попробуйте это.

Ответ 7

У меня была такая же проблема, но проблема была в том, что у меня было много "плиток" с датами начала и окончания. Я не получал результаты, которые мне нужны, потому что идентификатор для каждой даты начала был таким же, как и дата окончания. Кроме того, с несколькими полями даты я получал возвращаемые значения datePickers, заданные в первом экземпляре поля даты.

Этот код работал у меня:

[IN HTML]

<label for="display_date">Display/Start Date</label><br />

<input type="text" class="dateStart" name="display_date" value="" /><br />

<label for="display_date_end">End Date</label><br />

<input type="text" class="dateEnd" name="display_date_end" value="" /><br />

[IN JAVASCRIPT INCLUDE]

// set the datePicker on the start and end fields

$('input.dateStart').datepicker({dateFormat:"yy-mm-dd", changeYear: true});

$('input.dateEnd').datepicker({

dateFormat:"yy-mm-dd",

changeYear: true,

beforeShow: function(){

var value = $(this).siblings('.dateStart').val();

$(this).datepicker('option', 'minDate', value);

}

});

Я надеюсь, что это поможет кому-то еще с теми же проблемами!

bo huttinger

Ответ 8

Вы можете использовать . livequery плагин

$('.jQueryCalendar').livequery(function() {

    // This will fire for each matched element.
    // It will also fire for any new elements added to the DOM.
    $(this).datepicker(options);
});

я нашел ответ здесь