jQuery Datepicker with text input that doesn't allow user input

JqueryDatepicker

Jquery Problem Overview


How do I use the jQuery Datepicker with a textbox input:

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

that doesn't allow the user to input random text in the textbox. I want the Datepicker to pop up when the textbox gains focus or the user clicks on it, but I want the textbox to ignore any user input using the keyboard (copy & paste, or any other). I want to fill the textbox exclusively from the Datepicker calendar.

Is this possible?

jQuery 1.2.6
Datepicker 1.5.2

Jquery Solutions


Solution 1 - Jquery

You should be able to use the readonly attribute on the text input, and jQuery will still be able to edit its contents.

<input type='text' id='foo' readonly='true'>

Solution 2 - Jquery

Based on my experience I would recommend the solution suggested by Adhip Gupta:

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

The following code won't let the user type new characters, but will allow them to delete characters:

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

Additionally, this will render the form useless to those who have JavaScript disabled:

<input type="text" readonly="true" />

Solution 3 - Jquery

try

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


Solution 4 - Jquery

If you are reusing the date-picker at multiple places then it would be apt to modify the textbox also via JavaScript by using something like:

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

right after/before the place where you initialize your datepicker.

Solution 5 - Jquery

<input type="text" readonly="true" />

causes the textbox to lose its value after postback.

You rather should use Brad8118's suggestion which is working perfectly.

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

EDIT: to get it working for IE use 'keydown' instead of 'keypress'

Solution 6 - Jquery

After initialising the date picker:

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

$(".project-date").keydown(false);

Solution 7 - Jquery

You have two options to get this done. (As far as i know)

  1. Option A: Make your text field read only. It can be done as follows.

  2. Option B: Change the curser onfocus. Set ti to blur. it can be done by setting up the attribute onfocus="this.blur()" to your date picker text field.

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

Solution 8 - Jquery

$("#txtfromdate").datepicker({         
    numberOfMonths: 2,
    maxDate: 0,               
    dateFormat: 'dd-M-yy'       
}).attr('readonly', 'readonly');

add the readonly attribute in the jquery.

Solution 9 - Jquery

To datepicker to popup on gain focus:

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

If you don't want user input, add this to the input field

<input type="text" name="date" readonly="readonly" />

Solution 10 - Jquery

I just came across this so I am sharing here. Here is the option

https://eonasdan.github.io/bootstrap-datetimepicker/Options/#ignorereadonly

Here is the code.

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
});

Here is the fiddle:

http://jsfiddle.net/matbaric/wh1cb6cy/

My version of bootstrap-datetimepicker.js is 4.17.45

Solution 11 - Jquery

I know this thread is old, but for others who encounter the same problem, that implement @Brad8118 solution (which i prefer, because if you choose to make the input readonly then the user will not be able to delete the date value inserted from datepicker if he chooses) and also need to prevent the user from pasting a value (as @ErikPhilips suggested to be needed), I let this addition here, which worked for me: $("#my_txtbox").bind('paste',function(e) { e.preventDefault(); //disable paste }); from here https://www.dotnettricks.com/learn/jquery/disable-cut-copy-and-paste-in-textbox-using-jquery-javascript and the whole specific script used by me (using fengyuanchen/datepicker plugin instead):

$('[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;

Solution 12 - Jquery

Instead of adding readonly you can also use onkeypress="return false;"

Solution 13 - Jquery

This demo sort of does that by putting the calendar over the text field so you can't type in it. You can also set the input field to read only in the HTML to be sure.

<input type="text" readonly="true" />

Solution 14 - Jquery

HTML

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

CSS

.date-input {
	  background-color: white;
	  cursor: pointer;
}

Solution 15 - Jquery

I've found that the jQuery Calendar plugin, for me at least, in general just works better for selecting dates.

Solution 16 - Jquery

$('.date').each(function (e) {
    if ($(this).attr('disabled') != 'disabled') {
        $(this).attr('readOnly', 'true');
        $(this).css('cursor', 'pointer');
        $(this).css('color', '#5f5f5f');
    }
});

Solution 17 - Jquery

Here is your answer which is way to solve.You do not want to use jquery when you restricted the user input in textbox control.

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

<input type="text" id="my_txtbox" readonly="true"/>

Solution 18 - Jquery

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

worked like a charm..

Solution 19 - Jquery

Instead of using textbox you can use button also. Works best for me, where I don't want users to write date manually.

enter image description here

Solution 20 - Jquery

I know this question is already answered, and most suggested to use readonly attribure.
I just want to share my scenario and answer.

After adding readonly attribute to my HTML Element, I faced issue that I am not able to make this attribute as required dynamically.
Even tried setting as both readonly and required at HTML creation time.

So I will suggest do not use readonly if you want to set it as required also.

Instead use

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

$("#my_txtbox").keypress(function(event) {
    return ( ( event.keyCode || event.which ) === 9 ? true : false );
});

This allow to press tab key only.
You can add more keycodes which you want to bypass.

I below code since I have added both readonly and required it still submits the form.
After removing readonly it works properly.

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>

Solution 21 - Jquery

replace the ID of time picker: IDofDatetimePicker to your id.

This will prevent the user from entering any further keyboard inputs but still, the user will be able to access the time popup.

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

Try this source: https://github.com/jonthornton/jquery-timepicker/issues/109

Solution 22 - Jquery

This question has a lot of older answers and readonly seems to be the generally accepted solution. I believe the better approach in modern browsers is to use the inputmode="none" in the HTML input tag:

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

or, if you prefer to do it in script:

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

I haven't tested it extensively, but it is working well on the Android setups I have used it with.

Solution 23 - Jquery

In my case i have use disableTextInput property

$( ".datepicker" ).datepicker({'dateFormat' : 'd-m-y', 'disableTextInput':true });

Solution 24 - Jquery

Or you could, for example, use a hidden field to store the value...

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

and in the $("#my_txtbox").datepicker({ options:

        onSelect: function (dateText, inst) {
            $("#<% =hfDay.ClientID %>").val(dateText);
        }

Solution 25 - Jquery

If you want the user to select a date from the datepicker but you dont want the user to type inside the textbox then use the following code :

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionElliot VargasView Question on Stackoverflow
Solution 1 - JqueryAdam BellaireView Answer on Stackoverflow
Solution 2 - Jquery2046View Answer on Stackoverflow
Solution 3 - JqueryBrad8118View Answer on Stackoverflow
Solution 4 - JqueryAdhip GuptaView Answer on Stackoverflow
Solution 5 - Jqueryuser213545View Answer on Stackoverflow
Solution 6 - JqueryumutesenView Answer on Stackoverflow
Solution 7 - Jqueryuser2182143View Answer on Stackoverflow
Solution 8 - JqueryChenthilView Answer on Stackoverflow
Solution 9 - JqueryEduardo MolteniView Answer on Stackoverflow
Solution 10 - JqueryMatijaView Answer on Stackoverflow
Solution 11 - JqueryMariana MaricaView Answer on Stackoverflow
Solution 12 - JqueryKrishnan KKView Answer on Stackoverflow
Solution 13 - JqueryZachView Answer on Stackoverflow
Solution 14 - Jquerykayz1View Answer on Stackoverflow
Solution 15 - JqueryJames CurranView Answer on Stackoverflow
Solution 16 - JqueryLithiumDView Answer on Stackoverflow
Solution 17 - JqueryjohnkhadkaView Answer on Stackoverflow
Solution 18 - JqueryPrakash SinghView Answer on Stackoverflow
Solution 19 - JqueryAjjay AroraView Answer on Stackoverflow
Solution 20 - JqueryShantaram TupeView Answer on Stackoverflow
Solution 21 - JqueryMohanView Answer on Stackoverflow
Solution 22 - JqueryPeter BowersView Answer on Stackoverflow
Solution 23 - JqueryAhmed AwanView Answer on Stackoverflow
Solution 24 - JquerySteinwolfeView Answer on Stackoverflow
Solution 25 - JqueryShabbir.A.HussainView Answer on Stackoverflow