Как использовать jQuery Datepicker с вводом текстового поля:
$("#my_txtbox").datepicker({
// options
});
это не позволяет пользователю вводить случайный текст в текстовое поле. Я хочу, чтобы Datepicker всплывал, когда текстовое поле получает фокус или пользователь нажимает на него, но я хочу, чтобы текстовое поле игнорировало любой ввод пользователя с клавиатуры (копирование и вставка или любое другое). Я хочу заполнить текстовое поле исключительно из календаря Datepicker.
Это возможно?
jQuery 1.2.6
Datepicker 1.5.2

Вы должны иметь возможность использовать атрибут только чтение для ввода текста, и jQuery по-прежнему сможет редактировать его содержимое.
<input type='text' id='foo' readonly='true'>
это здорово ... однако стиль по умолчанию, который Chrome (и, возможно, другие браузеры) добавляет к атрибутам readonly, действительно неприятен, поэтому убедитесь, что вы переопределили его
Внимание. С readonly datepicker конечный пользователь сможет управлять значение поля выбирает другую дату из datepicker, как в этой ошибке: bugs.jqueryui.com/ticket/13107
@FooBar Вы предложили практическое решение; просто обратите внимание, что текущий предпочтительный способ (прошло некоторое время с момента вашего комментария) для установки атрибута readonly через метод prop (): $("#my_txtbox").prop('readonly', true)
@Werner спасибо за совет ..... Забавно, потому что 4 года спустя .... Я больше не беспокоюсь о людях с отключенным JavaScript :)
Согласно спецификации HTML WC3, это только <input readonly> или <input readonly = "readonly"> без true / false w3.org/TR/html5/forms.html#the-readonly-attribute
Я бы использовал указатель курсора, чтобы он выглядел интерактивным <input ... readonly = "readonly" style = "cursor:pointer; background-color: #FFFFFF">
Чтобы всплывающее окно выбора даты при фокусировке:
$(".selector").datepicker({ showOn: 'both' })
Если вам не нужен ввод данных пользователем, добавьте это в поле ввода
<input type = "text" name = "date" readonly = "readonly" />
пытаться
$("#my_txtbox").keypress(function(event) {event.preventDefault();});
Я успешно использовал это с asp.net, так как это не помогло, когда для атрибута <asp: textbox> readonly было установлено значение «true».
Это не мешает кому-либо вставить значение в текстовое поле для использования в будущем.
Этот тип демонстрация делает это, помещая календарь поверх текстового поля, чтобы вы не могли его вводить. Вы также можете установить поле ввода только для чтения в HTML, чтобы быть уверенным.
<input type = "text" readonly = "true" />
Я обнаружил, что плагин jQuery Calendar, по крайней мере для меня, в целом работает лучше для выбора дат.
Если вы повторно используете средство выбора даты в нескольких местах, можно изменить текстовое поле также с помощью JavaScript, используя что-то вроде:
$("#my_txtbox").attr( 'readOnly' , 'true' );
сразу после / перед местом, где вы инициализируете свой датпикер.
<input type = "text" readonly = "true" />
заставляет текстовое поле терять свое значение после обратной передачи.
Вам лучше использовать предложение Brad8118, которое отлично работает.
$("#my_txtbox").keypress(function(event) {event.preventDefault();});
Обновлено: чтобы заставить его работать в IE, используйте keydown вместо keypress
Исходя из своего опыта, я бы порекомендовал решение, предложенное Адипом Гуптой:
$("#my_txtbox").attr( 'readOnly' , 'true' );
Следующий код не позволяет пользователю вводить новые символы, но воля позволяет им удалять символы:
$("#my_txtbox").keypress(function(event) {event.preventDefault();});
Кроме того, это сделает форму бесполезной для тех, у кого отключен JavaScript:
<input type = "text" readonly = "true" />
OP следует подумать о том, чтобы пометить это как ответ из-за сценария отключения JavaScript.
в какой параллельной вселенной люди используют обычный веб-сайт с отключенным javascript?
Как бы этот JAVASCRIPT ответил на помощь, если бы JavaScript все равно был отключен?
@PWKad, добавив атрибут readonly в поле через JS, вы гарантируете, что если у них отключен JavaScript (и, следовательно, они не смогут использовать datepicker), они все равно смогут использовать форму посредством стандартного ручного ввода.
На момент написания это предпочтительный способ установки атрибута только для чтения с помощью jQuery: $("#my_txtbox").prop('readonly', true);
Или вы можете, например, использовать скрытое поле для хранения значения ...
<asp:HiddenField ID = "hfDay" runat = "server" />
и в $ ("# my_txtbox"). datepicker ({options:
onSelect: function (dateText, inst) {
$("#<% =hfDay.ClientID %>").val(dateText);
}
Если вы хотите, чтобы пользователь выбрал дату в окне выбора даты, но не хотите, чтобы пользователь вводил данные в текстовое поле, используйте следующий код:
<script type = "text/javascript">
$(function () {
$("#datepicker").datepicker({ maxDate: "-1D" }).attr('readonly', 'readonly');
$("#datepicker").readonlyDatepicker(true);
});
$('.date').each(function (e) {
if ($(this).attr('disabled') != 'disabled') {
$(this).attr('readOnly', 'true');
$(this).css('cursor', 'pointer');
$(this).css('color', '#5f5f5f');
}
});
У вас есть два варианта сделать это. (Насколько мне известно)
Вариант А: Сделайте текстовое поле доступным только для чтения. Это можно сделать следующим образом.
Вариант Б: Смена курсора при фокусе. Установите ti на размытие. это можно сделать, установив атрибут onfocus = "this.blur()" в текстовое поле выбора даты.
Пример: <input type = "text" name = "currentDate" id = "currentDate" onfocus = "this.blur()" readonly/>
взлом размытия был просто потрясающим. Поле не должно быть только для чтения, что смущает некоторых пользователей, когда они получают гигантский красный STOP в поле в Chrome ... он предотвращает вырезание и вставку, удаление, ввод текста и т.д ... и jquery datepicker по-прежнему работает нормально ...
HTML
<input class = "date-input" type = "text" readonly = "readonly" />
CSS
.date-input {
background-color: white;
cursor: pointer;
}
Вот ваш ответ, который является способом решения. Вы не хотите использовать jquery, когда вы ограничили ввод пользователя в элемент управления текстовым полем.
<input type = "text" id = "my_txtbox" readonly /> <!--HTML5-->
<input type = "text" id = "my_txtbox" readonly = "true"/>
$("#txtfromdate").datepicker({
numberOfMonths: 2,
maxDate: 0,
dateFormat: 'dd-M-yy'
}).attr('readonly', 'readonly');
добавьте атрибут readonly в jquery.
$ ("# my_txtbox"). prop ('только для чтения', истина)
работал как шарм ..
После инициализации средства выбора даты:
$(".project-date").datepicker({
dateFormat: 'd M yy'
});
$(".project-date").keydown(false);
Или за один шаг $(".project-date").datepicker().keydown(false);
Я только что наткнулся на это, поэтому делюсь здесь. Вот вариант
https://eonasdan.github.io/bootstrap-datetimepicker/Options/#ignorereadonly
Вот код.
HTML
<br/>
<!-- padding for jsfiddle -->
<div class = "input-group date" id = "arrival_date_div">
<input type = "text" class = "form-control" id = "arrival_date" name = "arrival_date" required readonly = "readonly" />
<span class = "input-group-addon">
<span class = "glyphicon-calendar glyphicon"></span>
</span>
</div>
JS
$('#arrival_date_div').datetimepicker({
format: "YYYY-MM-DD",
ignoreReadonly: true
});
Вот рабочий пример:
http://jsfiddle.net/matbaric/wh1cb6cy/
Моя версия bootstrap-datetimepicker.js - 4.17.45
Я знаю, что на этот вопрос уже дан ответ, и большинство из них предложили использовать атрибут readonly.
Я просто хочу поделиться своим сценарием и ответить.
После добавления атрибута readonly в мой HTML-элемент я столкнулся с проблемой, заключающейся в том, что я не могу динамически сделать атрибут это как required.
Даже пробовал устанавливать как readonly, так и required во время создания HTML.
Поэтому я предлагаю не использовать readonly, если вы также хотите установить его как required.
Вместо этого используйте
$("#my_txtbox").datepicker({
// options
});
$("#my_txtbox").keypress(function(event) {
return ( ( event.keyCode || event.which ) === 9 ? true : false );
});
Это позволяет нажимать только клавишу tab.
Вы можете добавить больше коды клавиш, которое хотите обойти.
Ниже приведен код, поскольку я добавил как readonly, так и required, он все еще отправляет форму.
После удаления readonly работает исправно.
https://jsfiddle.net/shantaram/hd9o7eor/
$(function() {
$('#id-checkbox').change( function(){
$('#id-input3').prop('required', $(this).is(':checked'));
});
$('#id-input3').datepicker();
$("#id-input3").keypress(function(event) {
return ( ( event.keyCode || event.which ) === 9 ? true : false );
});
});<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src = "https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<link href = "https://code.jquery.com/ui/jquery-ui-git.css" rel = "stylesheet"/>
<form action='https://jsfiddle.net/'>
Name: <input type = "text" name='xyz' id='id-input3' readonly='true' required='true'>
<input type='checkbox' id='id-checkbox'> Required <br>
<br>
<input type='submit' value='Submit'>
</form>заменить идентификатор средства выбора времени: IDofDatetimePicker на свой идентификатор.
Это предотвратит ввод пользователем каких-либо дополнительных вводов с клавиатуры, но, тем не менее, пользователь сможет получить доступ к всплывающему окну времени.
$ ("# my_txtbox"). keypress (функция (событие) {event.preventDefault ();});
Попробуй это источник: https://github.com/jonthornton/jquery-timepicker/issues/109
Я знаю, что этот поток старый, но для других, которые сталкиваются с той же проблемой, реализуют решение @ Brad8118 (которое я предпочитаю, потому что, если вы решите сделать ввод только для чтения, пользователь не сможет удалить значение даты, вставленное из datepicker если он выберет), а также необходимо запретить пользователю вставлять значение (как предположил @ErikPhilips), я разрешил это добавление здесь, которое сработало для меня:
$("#my_txtbox").bind('paste',function(e) { e.preventDefault(); //disable paste }); отсюда https://www.dotnettricks.com/learn/jquery/disable-cut-copy-and-paste-in-textbox-using-jquery-javascript
и весь конкретный скрипт, который я использовал (используя вместо этого плагин fengyuanchen / datepicker):
$('[data-toggle = "datepicker"]').datepicker({
autoHide: true,
pick: function (e) {
e.preventDefault();
$(this).val($(this).datepicker('getDate', true));
}
}).keypress(function(event) {
event.preventDefault(); // prevent keyboard writing but allowing value deletion
}).bind('paste',function(e) {
e.preventDefault()
}); //disable paste;
На этот вопрос есть много старых ответов, и только чтение кажется общепринятым решением. Я считаю, что лучший подход в современных браузерах - использовать inputmode = "none" во входном теге HTML:
<input type = "text" ... inputmode = "none" />
или, если вы предпочитаете делать это в скрипте:
$(selector).attr('inputmode', 'none');
Я не тестировал его всесторонне, но он хорошо работает с настройками Android, с которыми я его использовал.
Я писал этот проект в основном для мобильного Android. Ymmv с других платформ.
Вместо добавления только чтение вы также можете использовать onkeypress = "вернуть ложь;"
этот совет был опубликован двумя годами ранее: stackoverflow.com/a/41892415/2943403
На мой взгляд, это лучший ответ, он также позволяет выполнить проверку.
Для людей, у которых отключен Javascript, я бы оставил поле ввода только в HTML, а бит jQuery поместил бы атрибут readonly на загрузку страницы $ (document) .ready (function () {$ ("# my_txtbox"). Attr 'readOnly', 'истина'); }); Таким образом, пользователи с отключенным JS все еще могут выбрать дату