Отключить настройку фокуса для средства выбора даты пользовательского интерфейса jQuery

В средстве выбора даты пользовательского интерфейса jQuery есть возможность открывать средство выбора даты только при нажатии на изображение кнопки. Для примера см. следующее:

http://jqueryui.com/demos/datepicker/#icon-trigger

Проблема в том, что фокус находится в текстовом поле, как только открывается средство выбора даты. Можно ли отключить настройку фокуса?

При использовании страницы, подобной приведенной выше, на мобильном устройстве, таком как iPhone, появляется клавиатура, потому что текстовое поле получает фокус. Это не очень удобно для пользователя, так как вам нужно закрыть клавиатуру, чтобы действительно добраться до средства выбора даты и использовать его...


person black666    schedule 02.08.2011    source источник
comment
Альтернатива: DateBox — dev.jtsage.com/jQM-DateBox   -  person Phill Pafford    schedule 02.08.2011


Ответы (9)


установите для ввода значение Только для чтения

<input type="text" id="datePicker" readonly>
person Michal Shulman    schedule 30.06.2013
comment
Например: jquery.ui.datepicker.min.js #booking-datepicker запустит событие клика только для чтения, а #booking-timepicker нет. Вы можете добавить $('input').on('click', function() { $(this).removeAttr('readonly'); $(this).trigger('click'); }); - person fearis; 18.12.2014
comment
работает нормально, и с небольшой магией CSS это выглядит как обычное поле ввода с указателем в качестве курсора. Спасибо, Михал Шульман! - person user3714751; 17.07.2015

Если вы отключите ввод, клавиатура никогда не появится. Нравится...

    <input type="text" id="date_picker_field" name="date" disabled/>
person user981971    schedule 29.05.2013
comment
Но отключенное поле не отправляется при отправке формы. - person David Cooke; 12.02.2015
comment
вы можете вызвать .attr('disabled и .removeAttr('disabled') до и после вызова .datepicker('show') - person Omu; 18.10.2015

Достигнут желаемый результат, установив для параметра showOn datepicker значение «none».

$(#startdate").datepicker({
    defaultDate : "+7d",
    minDate: "+7d",
    changeMonth : true,
    changeYear : true,
    yearRange : "c:c+1",
    numberOfMonths : 1,
    showOn: "none",
    dateFormat : "dd-MM-yy",
    onClose : function(selectedDate) {
        $("#startdate").val(selectedDate);
        $( "#enddate" ).datepicker( "option", "minDate", selectedDate );
    }
});

Реализация средства выбора даты понимает значения «фокус», «кнопка» и «оба» для параметра showOn. По умолчанию установлено значение «фокус». Таким образом, технически передача любого значения, кроме этих 3, должна работать. Тем не менее, предостережение: после того, как функциональность по умолчанию будет переопределена, ответственность за правильное отображение календаря выбора даты лежит на вас.

person Anurag Joshi    schedule 19.11.2015

Это старый вопрос, но если вы наткнетесь на него в поисках решения той же проблемы, я полагаю, что решение в современных браузерах заключается в использовании inputmode="none" в теге ввода HTML:

<input type="text" ... inputmode="none" />

Я не тестировал его тщательно, но он хорошо работал в Android с настройками, которые я использовал.

person Peter Bowers    schedule 03.04.2019

Если вы используете jQuery Mobile-, вам, вероятно, захочется проверить некоторые ориентированные на мобильные устройства средства выбора даты. Я использую экспериментальный мобильный указатель даты jQueryUI (из альфа-версии 4) после опробования нескольких других, потому что мы хотели хороший вид календаря. По сути, он просто добавляет несколько классов CSS, добавленных поверх существующего средства выбора даты. Я использую версию Edited, поэтому она работает как всплывающее окно. Чтобы предотвратить открытие клавиатуры, я просто добавляю событие размытия jQuery $this.blur() сразу после того, как оно получает фокус, прежде чем отобразится средство выбора. Событие размытия происходит достаточно быстро, поэтому клавиатура никогда не открывается.

Если нет - вы, вероятно, захотите сделать то же самое. Я не знаю, как это сделать без редактирования кода.

person Danny C    schedule 07.09.2011

Я столкнулся с той же проблемой в приложении, над которым я работаю. Я закомментировал эти строки из моего файла jQuery, чтобы предотвратить автоматическую установку фокуса на текстовое поле сразу после нажатия на значок моего календаря. Это сработало для моего приложения.

if ( $.datepicker._shouldFocusInput( inst ) ) {
    inst.input.focus();
}
person Walt    schedule 27.11.2013

У меня была минифицированная версия v1.11.4 и в jquery-ui.min.js я нашел два раза

datepicker._shouldFocusInput(t)&&t.input.focus()

Я удалил &&t.input.focus(), и все работает нормально.

Также могут быть интересны:

_shouldFocusInput:function(e){
  return e.input&&e.input.is(":visible")&&!e.input.is(":disabled")&&!e.input.is(":focus")
}

Все еще ищу исправление без изменения основных файлов...

person PiTheNumber    schedule 21.05.2015

Я испытал то же самое, когда клавиатура / клавиатуры всплывают, прежде чем я могу выбрать дату во время тестирования на мобильных устройствах. Я только что добавил атрибут readonly="true" внутри

However, be sure to edit CSS and specify cursor: pointer because it shows a question mark every time you hover in desktop view.

person iamhonee    schedule 18.09.2013

Я нашел обходной путь, отключив поле ввода с помощью jQuery перед открытием средства выбора даты и включив его через 100 мс:

$selected = $("#datepickerInput");
$selected.prop('disabled', true);
$selected.datepicker("show");
window.setTimeout(function () {
   $selected.prop('disabled', false);
}, 100);

Протестировано в Chrome, а также с Cordova на Android 5.1.1.

person Bjoerg    schedule 22.09.2015