jQuery UI DatePicker зависает при втором вызове

Я создаю приложение ASP.NET MVC3, которое использует jQuery Datepicker и Timepicker внутри диалогового окна. Код довольно прост, только локализация:

$(document).ready(function () {
    $('.datepicker').datepicker({
        dateFormat: "dd/mm/yy",
        monthNames: ['Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro'],
        dayNames: ['Domingo', 'Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta', 'Sábado'],
        dayNamesMin:['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sáb'],
    });

    $('.timepicker').timepicker({
        timeOnlyTitle: 'Titulo',
        timeText: 'Tempo',
        hourText: 'Hora',
        minuteText: 'Minuto',
        secondText: 'Segundo',
        currentText: 'Atual',
        closeText: 'Fechar'
    }); 
});

Здесь нет секретов.

Датапикер отлично работает при первом использовании. Когда я использовал второй раз, браузер (любой браузер) зависает и предлагает мне, чтобы остановить выполнение сценария jquery-1.6.4.min.js. Чтобы воспроизвести ошибку, я просто перезагружаю всю страницу.

Что мне здесь не хватает?

Обновление

Добавление кода для модального окна:

Во-первых, я настраиваю, что все с class = 'modal' будет иметь некоторые основные параметры:

$('.modal').dialog({
    resizable: false,
    draggable: false,
    modal: true,
    position: 'center',
    autoOpen: false
});

Затем я расширяю jQuery некоторыми функциями. Одна из них устанавливает кнопки и отправляет:

$.extend({
    modalPopup: function (modal) {
        var $modal = $('#' + modal);
        var $form = $modal.find('form').first();

        $modal.dialog({
            buttons: {
                "OK": function (e) {
                    $.validator.unobtrusive.parse($form);
                    if ($form.valid()) {
                        $('.ui-dialog button:contains("OK")').button('disable');
                        $.post($form.attr('action'),
                        $form.serialize(),
                        function (data) {
                            $modal.dialog('close');
                            $('#maindiv').load(telaAtual);
                        });
                    }
                },
                "Cancelar": function () { $(this).dialog("close"); }
            },
            open: function () {
                $modal.unbind('submit');
                $modal.submit(function () {
                $modal.parents('.ui-dialog').first().find('.ui-button').first().click();
                return false;
            });

            $(this).find('.ui-dialog :input').first().blur();
        }
    })
    .dialog('open');
}

})

ОБНОВЛЕНИЕ

Я провел небольшое исследование и обнаружил, что проблема связана с DatePicker и Ajax.Каждый раз Может быть, Datepicker "вызывается дважды" каждый раз, когда выполняется вызов ajax. Что-то очень похожее на этот вопрос . Но Datepicker зависает, даже если я просто закрываю диалоговое окно, а это означает, что проблема начинается при первом вызове ajax.

Кто-нибудь может помочь мне это исправить? Может быть, где-то вернуть false или уничтожить datepicker перед созданием нового.

ОБНОВЛЕНИЕ 12.01.2012

Извините за задержку, ребята, и спасибо за помощь. Ни одно из решений, размещенных здесь, не сработало. Но еще раз благодарю вас всех за помощь.

Я обнаружил логическое свойство $. Datepicker.initialized , которое возвращает false при первой загрузке диалогового окна и возвращает true во второй раз. Теперь я могу избежать аварии во второй раз. Первая проблема решена. Но я все еще не знаю, как «повторно инициализировать» средство выбора даты, чтобы его можно было отображать при нажатии на текстовое поле.

Все еще ищем способ повторно инициализировать его.

Кроме того, был изменен код кнопки OK на этот, и он работает нормально:

"OK": function (e) {
                $.validator.unobtrusive.parse($form);
                if ($form.valid()) {
                    $modal.parents('.ui-dialog').find('button:contains("OK")').button('disable');
                    $.post($form.attr('action'),
                        $form.serialize(),
                        function (data) {
                            if (submodal) {
                                carregaParcial(titulo, id);
                            }
                            else {
                                $('#maindiv').html(data);
                            }
                            removeModal($modal);
                        });
                }

Функция $ form.serialize () уже возвращает html в переменной data , поэтому, Мне просто нужно получить его содержимое и установить как HTML файла maindiv.

8
задан Community 23 May 2017 в 10:29
поделиться