Back Space перенаправляет на предыдущую страницу в Chrome в окне выбора даты - PullRequest
3 голосов
/ 08 декабря 2011

Я использую средство выбора даты, чтобы выбрать дату для 2 дат .... при нажатии на клавишу возврата я очищаю значение текстового поля .... В Firefox он работает нормально, но в Chrome он перенаправляет на мою предыдущую страницу. *

$().ready(function() {

            var dates = $("#TestDateFrom, #TestDateTo").datepicker({
                changeMonth: true,
                numberOfMonths: 1,
                onSelect: function(selectedDate) {
                    var option = this.id == "TestDateFrom" ? "minDate" : "maxDate",
                    instance = $(this).data("datepicker"),
                    date = $.datepicker.parseDate(
                    instance.settings.dateFormat ||
                    $.datepicker._defaults.dateFormat,
                    selectedDate, instance.settings);
                    dates.not(this).datepicker("option", option, date);
                }
            });

            $("#TestDateFrom").keypress(function(e) {
                switch (e.keyCode) {
                    case 8:
                        $("#TestDateFrom").val("");  // backspace
                        break;
                    default:
                        e.preventDefault();
                        break;
                }
            });

            $("#TestDateTo").keypress(function(e) {
                switch (e.keyCode) {
                    case 8:
                        $("#TestDateTo").val("");  // backspace
                        break;
                    default:
                        e.preventDefault();
                        break;
                }
            });


        })

Ответы [ 2 ]

4 голосов
/ 08 декабря 2011

событие запускается в jquery для нажатия клавиши, нажатие клавиши вверх зависит от браузера .. поэтому запустите событие во всех трех, чтобы получить стабильный результат ...

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

$().ready(function() {

            var dates = $("#TestDateFrom, #TestDateTo").datepicker({
                changeMonth: true,
                numberOfMonths: 1,
                onSelect: function(selectedDate) {
                    var option = this.id == "TestDateFrom" ? "minDate" : "maxDate",
                    instance = $(this).data("datepicker"),
                    date = $.datepicker.parseDate(
                    instance.settings.dateFormat ||
                    $.datepicker._defaults.dateFormat,
                    selectedDate, instance.settings);
                    dates.not(this).datepicker("option", option, date);
                }
            });

            $("#TestDateFrom").keyup(function(e) {
                switch (e.keyCode) {
                    case 8:
                        $("#TestDateFrom").val("");
                        e.preventDefault();  // backspace
                        break;
                    default:
                        e.preventDefault();
                        break;
                }
            });
            $("#TestDateFrom").keydown(function(e) {
                switch (e.keyCode) {
                    case 8:
                        $("#TestDateFrom").val("");  // 
                        e.preventDefault();
                        break;
                    default:
                        e.preventDefault();
                        break;
                }
            });

            $("#TestDateFrom").keypress(function(e) {
                switch (e.keyCode) {
                    case 8:
                        $("#TestDateFrom").val("");  // backspace
                        e.preventDefault();
                        break;
                    default:
                        e.preventDefault();
                        break;
                }
            });

            $("#TestDateTo").keypress(function(e) {
                switch (e.keyCode) {
                    case 8:
                        $("#TestDateTo").val("");  // backspace
                        e.preventDefault();
                        break;
                    default:
                        e.preventDefault();
                        break;
                }
            });

            $("#TestDateTo").keyup(function(e) {
                switch (e.keyCode) {
                    case 8:
                        $("#TestDateTo").val("");  // backspace
                        e.preventDefault();
                        break;
                    default:
                        e.preventDefault();
                        break;
                }
            });
            $("#TestDateTo").keydown(function(e) {
                switch (e.keyCode) {
                    case 8:
                        $("#TestDateTo").val("");  // backspace
                        e.preventDefault();
                        break;
                    default:
                        e.preventDefault();
                        break;
                }
            });




        })
0 голосов
/ 20 апреля 2016

Это сработало для меня, но мои текстовые поля выбора даты настроены только для чтения. Не хотел, чтобы пользователь мог вводить дату. Я создал делегированный обработчик событий, который обрабатывает все «ключевые» события для двух текстовых полей DatePicker.

$(document).on('keypress keydown keyup', '#txtDtFrom, #txtDtTo', function (e){
    if (e.keyCode == 8) e.preventDefault();
});

Вы также можете добавить класс во все текстовые поля DatePicker, если хотите немного упростить ваш селектор.

...