Поведение при затваряне на JQuery DatePicker

Имам страница, която има JQuery инструмент за избор на дати, който е предназначен да показва дати във формат mm/yy. Не съм написал първоначалния JQuery и не съм много запознат с него, така че това може да е лесен проблем, но когато потребител щракне върху бутона „Готово“, инструментът за избор на дата изчезва за секунда, след което се отваря обратно, сякаш потребителят е щракнал отново в текстовото поле.

Кодът, използван за инстанциране на инструмента за избор на дата, е:

$(function() {
    $('.datepicker').datepicker({
        changeMonth: true,
        changeYear: true,
        showButtonPanel: true,
        dateFormat: 'mm/yy',
        onClose: function(dateText, inst) {
            var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
            var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
            $(this).datepicker('setDate', new Date(year, month, 1));
        },
        beforeShow: function(input, inst) {
            if ((datestr = $(this).val()).length > 0) {
                year = datestr.substring(datestr.length - 4, datestr.length);
                //month = jQuery.inArray(datestr.substring(0, datestr.length - 5), $(this).datepicker('option', 'monthNames'));
                month = datestr.substring(0, datestr.length - 5);
                $(this).datepicker('option', 'defaultDate', new Date(year, month-1, 1));
                $(this).datepicker('setDate', new Date(year, month-1, 1));
            }
        }
    });
    $("#datepicker").mousedown(function() {
        $('#ui-datepicker-div').toggle();     
    });
});

След като гуглих известно време, добавих манипулатора на mousedown и това направи така, че когато щракнете някъде на страницата извън инструмента за избор на дата, той се затваря според очакванията, но ако щракнете върху бутона за готово, той всъщност не затваря инструмента за избор на дата.


person Mike_OBrien    schedule 01.10.2012    source източник
comment
Когато кажете, че когато потребител щракне върху бутона „Готово“, инструментът за избор на дата изчезва за секунда, след което се отваря обратно, сякаш потребителят отново е щракнал в текстовото поле, това ли е грешката или планираното поведение?   -  person Adriano Carneiro    schedule 01.10.2012
comment
Това е грешката. Предположих, че когато потребителят щракне върху Готово, намерението ще бъде инструментът за избор на дата да настрои текстовото поле на избраната от тях дата и инструментът за избор на дата да изчезне, така че потребителят да може да види останалите контроли, за да въведе каквато и да е друга информация това се изисква.   -  person Mike_OBrien    schedule 01.10.2012
comment
Това изглежда е проблем само и в IE. И chrome, и FF действат според очакванията.   -  person Mike_OBrien    schedule 01.10.2012


Отговори (2)


Работи според очакванията. Не виждам грешката във цигулката, която зададох http://jsfiddle.net/adrianonantua/ZQTqe/

person Adriano Carneiro    schedule 01.10.2012
comment
може ли валидирането на формуляра да го накара да се фокусира отново? или как да проверя версията на JQuery, която моят предшественик използва, за да направи това? някаква идея защо ще работи както се очаква във fiddle, но не и на жив сървър? - person Mike_OBrien; 01.10.2012
comment
Логичният извод е, че сценарият не е същият. Имате нещо друго, което се случва в сценария на сървъра. Споменахте процес на валидиране на формуляр, това може да е всичко. Опитайте да го отстраните, поставете клауза debugger; в първия ред на beforeShow и погледнете проследяването на стека, за да видите кой го извиква отново. - person Adriano Carneiro; 01.10.2012
comment
Благодаря за помощта, но в крайна сметка премахнах напълно инструмента за избор на дата от страницата. Беше използван за получаване на датата на изтичане на кредитна карта, така че просто го превключих да използва две комбинирани полета вместо инструмент за избор на дата. Не знам какво причинява проблема или къде дори да започна да търся, така че просто го маркирам като загубена кауза. - person Mike_OBrien; 01.10.2012

Бих казал, че това е проблемът:

$("#datepicker").mousedown(function() {
    $('#ui-datepicker-div').toggle();     
});

Той превключва показването/скриването на формуляр при натискане на мишката, вашият избор на дата ще бъде скрит автоматично, когато щракнете върху бутон за дата или готово. Опитайте се да премахнете това от кода си.

person jcubic    schedule 01.10.2012
comment
преди да включа тези редове, никога нямаше да изчезне, освен ако не щракнете в текстовото поле и не използвате клавиша tab, за да преминете към следващата контрола. Щракването където и да е на страницата накара инструмента за избор на дата да мига и след това да се включва отново. Поправих първоначалния си проблем и мисля, че това беше само въпрос на това, че не съм бил запознат с кода и човекът, който го е написал, е направил нещо неправилно. Премахнах въпросния избор на дата и намерих друг начин да постигна това, от което се нуждаех. - person Mike_OBrien; 01.10.2012
comment
Мислех, че манипулаторът е прикрепен към инструмента за избор на дата, а не към полето за въвеждане. - person jcubic; 01.10.2012
comment
Инструментът за избор на дата разширява полето за въвеждане. Така че мисля за тях като за едно и също (datepicker не може да съществува без полето за въвеждане, полето за въвеждане е просто текстово поле без datepicker). Що се отнася до манипулатора, не знам към кой контрол принадлежи. Няма значение, сигурен съм, че това беше просто смесица от съвпадения, които причиниха първоначалния ми проблем, и нямам никакво желание да го проследя повече, тъй като разделянето на датата на две различни полета беше най-интуитивният начин да имам потребителят въвежда информацията като начало. - person Mike_OBrien; 02.10.2012