ユーザー入力を許可しないテキスト入力を備えたjQuery Datepicker


140

テキストボックス入力でjQuery Datepickerを使用するにはどうすればよいですか。

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

これは、ユーザーがテキストボックスにランダムなテキストを入力することを許可しません。テキストボックスがフォーカスを取得したとき、またはユーザーがクリックしたときに、Datepickerをポップアップさせたいのですが、キーボードを使用したユーザー入力(コピーと貼り付けなど)をテキストボックスが無視するようにしたいのですが。Datepickerカレンダーからのみテキストボックスに入力したいのですが。

これは可能ですか?

jQuery 1.2.6
Datepicker 1.5.2

回答:


269

テキスト入力でreadonly属性を使用できるはずですが、jQueryはその内容を編集できます。

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

30
Javascriptが無効になっている人々の場合、HTMLの入力フィールドはそのままにして、jQueryのページにreadonly属性を配置しますload $(document).ready(function(){$( "#my_txtbox")。attr 'readOnly'、 'true'); }); そう
すれば

6
これはすばらしいです。ただし、Chrome(および場合によっては他のブラウザー)が読み取り専用属性に追加するデフォルトのスタイル設定は本当に不快なので、必ずオーバーライドしてください
Damon

1
@FooBarあなたは実用的な解決策を提案しました。:readonly属性を設定する現在の好ましい方法は、(いくつかの時間があなたのコメント経過として)小道具()メソッドを介してであることをちょうどノート$("#my_txtbox").prop('readonly', true)
ヴェルナー

2
WC3 HTML仕様に従って、true / falseを含ま
Ankit Sharma '21

5
カーソルポインターを使用してクリック可能にしたい<input ... readonly="readonly" style="cursor:pointer; background-color: #FFFFFF">
Benjamin Lucidarme '19年

61

私の経験に基づいて、Adhip Guptaによって提案されたソリューションをお勧めします。

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

次のコードは、ユーザーが新しい文字を入力させません、しかします削除文字にそれらを許可します:

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

さらに、これにより、JavaScriptが無効になっているユーザーにとってフォームが役に立たなくなります。

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

3
JavaScript無効化シナリオのため、OPはこれを回答としてマークすることを検討する必要があります。
CeejeeB 2012

7
どのパラレルユニバースで、JavaScriptが無効になっている通常のWebサイトを使用していますか?
d.raev 2013

とにかくJavaScriptが無効になっている場合、このJAVASCRIPTはどのようにヘルプに答えますか?
PW Kad 2014年

1
readonlyJSを介してフィールドに属性を追加することで@PWKadを使用すると、JavaScriptが無効になっている(したがって、日付ピッカーを使用できない)場合でも、標準の手動入力でフォームを使用できます。
ジョナサンベンダー

2
これを書いている時点では、jQuery:を使用してreadonly属性を設定する方法としてこれが推奨されています$("#my_txtbox").prop('readonly', true)
Werner

13

試す

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

<asp:textbox>のreadonly属性を "true"に設定するとうまく機能しないため、asp.netでこれを使用して成功しました
Russ Cam

2
これは、誰かが将来の参照のためにテキストボックスに値を貼り付けることを妨げません。
Erik Philips

10

複数の場所で日付ピッカーを再利用している場合、JavaScriptを介して次のようなものを使用してテキストボックスを変更する傾向があります。

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

日付ピッカーを初期化する場所の直後/前。


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

テキストボックスはポストバック後にその値を失います。

むしろ、完全に機能するBrad8118の提案を使用する必要があります。

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

編集:IEで機能させるには、「keypress」の代わりに「keydown」を使用します


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

jqueryにreadonly属性を追加します。


4

これを行うには、2つのオプションがあります。(私の知る限りでは)

  1. オプションA:テキストフィールドを読み取り専用にします。これは次のように行うことができます。

  2. オプションB:カーソルのonfocusを変更します。tiをぼかしに設定します。これはonfocus="this.blur()"、日付ピッカーのテキストフィールドに属性を設定することで実行できます 。

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


2
ぼかしのハックはちょっと素晴らしかった。フィールドは読み取り専用である必要はなく、Chromeのフィールドで巨大な赤いSTOPが表示されたときに一部のユーザーを混乱させます...カットアンドペースト、削除、入力などを防止し、jquery日付ピッカーは正常に機能します...
デビッドC


3

フォーカスを得てポップアップする日付ピッカーに:

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

ユーザー入力が必要ない場合は、これを入力フィールドに追加します

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

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です


1

このデモでは、カレンダーをテキストフィールドの上に置くことで、入力できないようにします。確かに、入力フィールドをHTMLでのみ読み取るように設定することもできます。

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

1

HTML

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

CSS

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

1

私はこのスレッドが古いことを知っていますが、同じ問題が発生する他の人のために、@ Brad8118ソリューションを実装します(入力を読み取り専用にすることを選択した場合、ユーザーはdatepickerから挿入された日付値を削除できないためです)彼が選択した場合)、ユーザーが値を貼り付けないようにする必要がある場合(@ErikPhilipsが必要であることが示唆されているように)、ここでこの追加を許可 $("#my_txtbox").bind('paste',function(e) { e.preventDefault(); //disable paste });しました。 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;


0

少なくとも私にとっては、jQuery Calendarプラグインは、一般的に、日付を選択するのに適しています。


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

0

これが解決策です。テキストボックスコントロールでユーザー入力を制限したときにjqueryを使用したくない場合。

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

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


0

テキストボックスを使用する代わりに、ボタンを使用することもできます。ユーザーが日付を手動で入力したくない場合に最適です。

ここに画像の説明を入力してください


0

この質問は既に回答済みで、ほとんどがreadonlyattribureの使用を提案しています。
私は自分のシナリオと答えを共有したいだけです。

HTML要素にreadonly属性を追加した後、この属性を動的に作成できないという問題に直面しました。 両方として、またHTMLの作成時にも設定してみました。required
readonlyrequired

だから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>


0

時間ピッカーのID:IDofDatetimePickerを自分のIDに置き換えます。

これにより、ユーザーはそれ以上キーボード入力を入力できなくなりますが、それでもユーザーは時間ポップアップにアクセスできます。

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

このソースを試してください:https : //github.com/jonthornton/jquery-timepicker/issues/109


0

この質問には多くの古い回答があり、readonlyが一般的に受け入れられている解決策のようです。最近のブラウザでのより良いアプローチinputmode="none"は、HTML inputタグでを使用することだと思います:

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

または、スクリプトで実行する場合:

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

十分なテストはしていませんが、使用したAndroidの設定で問題なく動作しています。


私は主にモバイルAndroid向けにこのプロジェクトをコーディングしていました。Ymmvと他のプラットフォーム。
Peter Bowers

-1

または、たとえば、非表示フィールドを使用して値を保存することもできます...

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

そして$( "#my_txtbox")。datepicker({options:

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

-1

ユーザーに日付ピッカーから日付を選択させたいが、テキストボックス内に入力させたくない場合は、次のコードを使用します。

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

});

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.