145

如何使用带有文本框输入的 jQuery Datepicker:

$("#my_txtbox").datepicker({
  // options
});

不允许用户在文本框中输入随机文本。我希望在文本框获得焦点或用户单击它时弹出 Datepicker,但我希望文本框忽略使用键盘的任何用户输入(复制和粘贴或任何其他)。我想专门从 Datepicker 日历中填充文本框。

这可能吗?

jQuery 1.2.6
日期选择器 1.5.2

4

25 回答 25

278

您应该能够在文本输入上使用readonly属性,并且 jQuery 仍然能够编辑其内容。

<input type='text' id='foo' readonly='true'>
于 2008-09-30T16:17:35.790 回答
61

根据我的经验,我会推荐 Adhip Gupta 建议的解决方案:

$("#my_txtbox").attr( 'readOnly' , 'true' );

以下代码不会让用户输入新字符,但允许他们删除字符:

$("#my_txtbox").keypress(function(event) {event.preventDefault();});

此外,这将使表单对禁用 JavaScript 的人无用:

<input type="text" readonly="true" />
于 2011-10-02T07:27:15.103 回答
13

尝试

$("#my_txtbox").keypress(function(event) {event.preventDefault();});
于 2008-09-30T16:21:26.030 回答
10

如果您在多个地方重用日期选择器,那么也很容易通过 JavaScript 修改文本框,方法如下:

$("#my_txtbox").attr( 'readOnly' , 'true' );

就在您初始化日期选择器的位置之后/之前。

于 2009-11-17T11:16:11.550 回答
6
<input type="text" readonly="true" />

导致文本框在回发后丢失其值。

你宁愿使用 Brad8118 的建议,它工作得很好。

$("#my_txtbox").keypress(function(event) {event.preventDefault();});

编辑:要让它在 IE 上工作,请使用“keydown”而不是“keypress”

于 2009-11-18T07:37:23.627 回答
6

初始化日期选择器后:

$(".project-date").datepicker({
    dateFormat: 'd M yy'
});

$(".project-date").keydown(false);
于 2017-01-27T11:01:15.400 回答
4

您有两种选择来完成这项工作。(据我所知)

  1. 选项 A:使您的文本字段只读。可以按如下方式完成。

  2. 选项 B:更改光标焦点。将 ti 设置为模糊。可以通过将属性设置 onfocus="this.blur()"为日期选择器文本字段来完成。

前任: <input type="text" name="currentDate" id="currentDate" onfocus="this.blur()" readonly/>

于 2014-11-21T08:53:01.330 回答
4
$("#txtfromdate").datepicker({         
    numberOfMonths: 2,
    maxDate: 0,               
    dateFormat: 'dd-M-yy'       
}).attr('readonly', 'readonly');

在 jquery 中添加 readonly 属性。

于 2015-09-18T10:15:43.900 回答
3

要在获取焦点时弹出日期选择器:

$(".selector").datepicker({ showOn: 'both' })

如果您不想要用户输入,请将其添加到输入字段

<input type="text" name="date" readonly="readonly" />
于 2008-09-30T16:20:02.073 回答
3

我刚刚遇到这个,所以我在这里分享。这是选项

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

于 2017-03-07T10:12:27.620 回答
2

我知道这个线程很旧,但是对于遇到同样问题的其他人来说,实现@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;
于 2019-03-11T16:10:18.217 回答
2

除了添加只读之外,您还可以使用onkeypress="return false;"

于 2019-08-05T07:44:36.983 回答
1

这个演示通过将日历放在文本字段上来做到这一点,这样你就不能输入它了。您还可以将输入字段设置为仅在 HTML 中读取以确保。

<input type="text" readonly="true" />
于 2008-09-30T16:22:09.803 回答
1

HTML

<input class="date-input" type="text" readonly="readonly" />

CSS

.date-input {
      background-color: white;
      cursor: pointer;
}
于 2015-02-20T09:00:46.140 回答
0

我发现 jQuery Calendar 插件,至少对我来说,通常更适合选择日期。

于 2008-09-30T16:22:15.467 回答
0
$('.date').each(function (e) {
    if ($(this).attr('disabled') != 'disabled') {
        $(this).attr('readOnly', 'true');
        $(this).css('cursor', 'pointer');
        $(this).css('color', '#5f5f5f');
    }
});
于 2013-11-19T12:51:51.090 回答
0

这是您的答案,这是解决方法。当您限制文本框控件中的用户输入时,您不想使用 jquery。

<input type="text" id="my_txtbox" readonly />  <!--HTML5-->

<input type="text" id="my_txtbox" readonly="true"/>
于 2015-07-31T04:52:29.507 回答
0

$("#my_txtbox").prop('readonly', true)

像魅力一样工作..

于 2016-07-16T09:08:32.610 回答
0

除了使用文本框,您还可以使用按钮。最适合我,我不希望用户手动编写日期。

在此处输入图像描述

于 2016-11-24T05:57:25.200 回答
0

我知道这个问题已经得到解答,并且大多数人建议使用readonly属性。
我只想分享我的场景和答案。

readonly属性添加到我的HTML Element后,我​​遇到了无法使属性成为required动态的问题。
甚至尝试在 HTML 创建时同时readonly设置。required

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>

于 2017-06-16T10:22:06.813 回答
0

将时间选择器的 ID:IDofDatetimePicker 替换为您的 ID。

这将阻止用户输入任何进一步的键盘输入,但用户仍然可以访问时间弹出窗口。

$("#my_txtbox").keypress(function(event) {event.preventDefault();});

试试这个来源: https ://github.com/jonthornton/jquery-timepicker/issues/109

于 2017-09-20T19:41:48.753 回答
0

这个问题有很多较旧的答案,并且 readonly 似乎是普遍接受的解决方案。我相信现代浏览器中更好的方法是inputmode="none"在 HTML 输入标签中使用:

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

或者,如果您更喜欢在脚本中执行此操作:

$(selector).attr('inputmode', 'none');

我没有对它进行广泛的测试,但它在我使用过的 Android 设置上运行良好。

于 2019-04-03T09:51:31.063 回答
0

就我而言,我有使用disableTextInput财产

$( ".datepicker" ).datepicker({'dateFormat' : 'd-m-y', 'disableTextInput':true });
于 2021-05-24T11:17:34.777 回答
-1

或者,例如,您可以使用隐藏字段来存储值...

        <asp:HiddenField ID="hfDay" runat="server" />

并在 $("#my_txtbox").datepicker({ 选项:

        onSelect: function (dateText, inst) {
            $("#<% =hfDay.ClientID %>").val(dateText);
        }
于 2012-10-17T21:50:47.453 回答
-1

如果您希望用户从日期选择器中选择一个日期,但您不希望用户在文本框中输入,请使用以下代码:

<script type="text/javascript">
$(function () {
    $("#datepicker").datepicker({ maxDate: "-1D" }).attr('readonly', 'readonly');
    $("#datepicker").readonlyDatepicker(true);

});

于 2013-02-26T11:53:42.370 回答