Как очистить доступное только для чтения текстовое поле выбора даты jQuery? - PullRequest
10 голосов
/ 16 декабря 2010

У нас есть элемент управления выбора даты JQuery в текстовом поле только для чтения. Мы делаем текстовое поле доступным только для чтения, чтобы пользователи не могли вводить свои собственные даты. Это прекрасно работает, но мы хотим предоставить пользователям возможность очистить содержимое текстового поля после того, как они выбрали дату.

Как ты можешь это сделать? По-видимому, эта функция была встроена в элемент управления, но удалена .

Примечание: мы отключаем ввод в текстовое поле, используя:

$("#text-box").keypress(function (e)
{
    e.preventDefault();
});

Обновление : я решил эту проблему с небольшим изменением выбранного ответа:

    myTextBox.keydown(function(e){
        if (e.keyCode == 46 || e.keyCode == 8) {
            //Delete and backspace clear text 
            $(this).val(''); //Clear text
            $(this).datepicker("hide"); //Hide the datepicker calendar if displayed
            $(this).blur(); //aka "unfocus"
        }

        //Prevent user from manually entering in a date - have to use the datepicker box
        e.preventDefault();
    });

Ответы [ 2 ]

6 голосов
/ 16 декабря 2010

Как насчет исключения ключей , которые пользователь использует для очистки текстовых полей, таких как "del", "backspace" и т. Д .?

$("#text-box").keypress(function (e)
{
  switch(e.keyCode) { 
          case 46:  // delete
          case 8:  // backspace
            break;
          default:
            e.preventDefault();
            break;
       }
});
2 голосов
/ 18 июля 2012
$("#text-box").bind('keypress keydown', function (e) {
  var tag = e.target.tagName;
  if (e.which === 8 || e.which === 46) { 
    $(this).val(''); 
    $(this).datepicker("hide"); 
    $(this).blur(); 
    e.stopPropagation();
    e.preventDefault();
    return false;
  }
});

Это должно работать в браузерах, которые не запускают события нажатия клавиш для клавиш "delete" .

...