下の図のようにtype="date"
入力フィールドを試してみると、phonegapアプリを実行しているIamが、思ったようにiPhoneの日付ピッカーを表示しますが、指定したプレースホルダーは表示されません。私はここで同じ問題をここで見つけましたSO、しかしどこにも解決策がない、誰かが私を助けることができることを望みます。ありがとう。
<input placeholder="Date" class="textbox-n" type="date" id="date">
それは適切ではないかもしれません...しかしそれはついに私を助けました。
<input placeholder="Date" class="textbox-n" type="text" onfocus="(this.type='date')" id="date">
Mvpのメソッドを使用していて、onblurイベントを追加してテキストフィールドに戻す場合は、入力フィールドがフォーカスを失ったときにプレースホルダテキストが再び表示されるようにします。ハックを少し良くするだけです。
<input placeholder="Date" class="textbox-n" type="text" onfocus="(this.type='date')" onblur="(this.type='text')" id="date">
お役に立てれば。
私は次のものを使ってしまいました。
Firefoxのコメントについて:通常、Firefoxは入力タイプの日付のテキストプレースホルダーを表示しません。しかし、これはCordova/PhoneGapの質問であるため、これは問題にならないはずです(FirefoxOSに対して開発したいのでない限り)。
input[type="date"]:not(.has-value):before{
color: lightgray;
content: attr(placeholder);
}
<input type="date" placeholder="MY PLACEHOLDER" onchange="this.className=(this.value!=''?'has-value':'')">
私は私のCSSでこれを使用しました:
input[type="date"]:before{
color:lightgray;
content:attr(placeholder);
}
input[type="date"].full:before {
color:black;
content:""!important;
}
そして、このような何かをjavascriptに入れます。
$("#myel").on("input",function(){
if($(this).val().length>0){
$(this).addClass("full");
}
else{
$(this).removeClass("full");
}
});
それはモバイルデバイス(IOS 8とAndroid)のために私のために働きます。しかし、私は入力テキストタイプでデスクトップにjquery inputmaskを使いました。あなたのコードがie8で動くならこの解決策はいい方法です。
今日(2016年)現在、私はこれら2つのスニペットをうまく使用しています(それに加えてBootstrap4でもうまく機能します)。
input[type=date] {
text-align: right;
}
input[type="date"]:before {
color: lightgrey;
content: attr(placeholder) !important;
margin-right: 0.5em;
}
input[type="date"]:before {
color: lightgrey;
content: attr(placeholder) !important;
margin-right: 0.5em;
}
input[type="date"]:focus:before {
content: '' !important;
}
によると HTML標準 :
次のコンテンツ属性は指定しないでください。要素には適用しないでください。accept、alt、checked、dirname、formaction、forformctype、formmethod、formnovalidate、formtarget、height、inputmode、maxlength、minlength、multiple、pattern、プレースホルダー、サイズ、src、および幅。
私はこの聖霊降臨祭のjQueryを使用しました: http://jsfiddle.net/daviderussoabram/65w1qhLz/
$('input[type="date"], input[type="datetime"], input[type="datetime-local"], input[type="month"], input[type="time"], input[type="week"]').each(function() {
var el = this, type = $(el).attr('type');
if ($(el).val() == '') $(el).attr('type', 'text');
$(el).focus(function() {
$(el).attr('type', type);
el.click();
});
$(el).blur(function() {
if ($(el).val() == '') $(el).attr('type', 'text');
});
});
わたしにはできる:
input[type='date']:after {
content: attr(placeholder)
}
DeadproxorとAlessioの回答に基づいて、私はCSSだけを使ってみるでしょう:
input[type="date"]::before{
color: #999;
content: attr(placeholder) ": ";
}
input[type="date"]:focus::before {
content: "" !important;
}
また、入力に何かを書いた後にプレースホルダを見えなくする必要がある場合は、入力が必須の場合は:validおよび:invalidセレクタを使用してみてください。
EDIT
ここにあなたが使用している場合のコードはあなたの入力で要求されました:
input[type="date"]::before {
color: #999999;
content: attr(placeholder);
}
input[type="date"] {
color: #ffffff;
}
input[type="date"]:focus,
input[type="date"]:valid {
color: #666666;
}
input[type="date"]:focus::before,
input[type="date"]:valid::before {
content: "" !important;
}
<input type="date" placeholder="Date" required>
あなたの問題を解決するためのより良い方法を見つけました。これはあなたに役立つと思います。フォーカスが当たっていると、ボックスのタイプがテキストに変わり、プレースホルダーが表示されます。フォーカスされると、その種類が日付に変わり、カレンダービューが表示されます。
<input placeholder="Date" class="textbox-n" type="text" onfocusin="(this.type='date')" onfocusout="(this.type='text')" id="date">
現在の正しい答えで問題を指摘している「フィールドをクリックすると日付ピッカーの代わりにスクリーンキーボードが表示される」:
この問題は、(=テキスト)をクリックしたときにブラウザが入力の種類に従って動作することが原因で発生します。そのため、最初のステップでJSによってtype = dateとして定義された入力要素にフォーカスを合わせて、入力要素に焦点を合わせるのをやめて(blur)、プログラム的にフォーカスを再開する必要があります。キーボードは電話番号モードで表示されます。
<input placeholder="Date" type="text" onfocus="this.type='date';
this.setAttribute('onfocus','');this.blur();this.focus();">
日付入力問題を要約するには
これらの要件を満たすために私が見つけた解決策はネイティブのフォーム要素をスタイルするために通常のトリックを使うことです:要素が表示されるが見えないことを確認し、関連ラベルを通してその期待されるスタイルを表示します。通常、ラベルは入力として(プレースホルダを含む)表示されますが、その上に表示されます。
だから、HTMLのような:
<div class="date-input>
<input id="myInput" type="date">
<label for="myInput">
<span class="place-holder">Enter a date</span>
</label>
</div>
次のようにスタイルを変えることができます。
.date-input {
display: inline-block;
position: relative;
}
/* Fields overriding */
input[type=date] + label {
position: absolute; /* Same Origin as the input, to display over it */
background: white; /* Opaque background to hide the input behind */
left: 0; /* Start at same x coordinate */
}
/* Common input styling */
input[type=date], label {
/* Must share same size to display properly (focus, etc.) */
width: 15em;
height: 1em;
font-size: 1em;
}
このような関連付けられたラベルに対するイベント(クリック、フォーカス)はフィールド自体にも反映されるため、日付入力UIを起動します。
そのようなソリューションをライブでテストしたい場合は、タブレットまたは携帯端末から this Angular version を実行できます。
これを考え出して、しばらくして、type="text"
のままにして、上記のようにonfocus="(this.type='date')"
を追加します。
私は上で言及されたonBlurのアイデアさえ好きです
<input placeholder="Date" class="textbox-n" type="text" onfocus="(this.type='date')" onblur="(this.type='text')" id="date">
これが上で起こっているものをあまり集めなかった人に役立つことを願っています
@Mumthezirが提供するイオンフレームワークとソリューションを使ったImは、ほとんど完璧です。誰かが私と同じ問題を抱えている場合(変更後、入力はまだフォーカスされており、スクロールすると、値は単に消えてしまう)ですので、私はinput.blur()を作るためにonchangeを追加しました
<input placeholder="Date" class="textbox-n" type="text" onfocus=" (this.type='date')" onchange="this.blur();" id="date">
あなたはできる
このような...
$("#dateplaceholder").change(function(evt) {
var date = new Date($("#dateplaceholder").val());
$("#dateplaceholder").attr("type", "text");
$("#dateplaceholder").val(date.getDate() + "/" + (date.getMonth() + 1) + "/" + date.getFullYear());
});
$("#dateplaceholder").focus(function(evt) {
$("#dateplaceholder").attr("type", "date");
setTimeout('$("#dateplaceholder").click();', 500);
});
$("#dateplaceholder").attr("type", "text");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<input type="date" id="dateplaceholder" placeholder="Set the date" />
だから私がやろうと決心したのはここにあり、iPhoneやAndroidを含むすべてのモバイルブラウザでうまく機能しています。
$(document).ready(function(){
$('input[type="date"]').each(function(e) {
var $el = $(this),
$this_placeholder = $(this).closest('label').find('.custom-placeholder');
$el.on('change',function(){
if($el.val()){
$this_placeholder.text('');
}else {
$this_placeholder.text($el.attr('placeholder'));
}
});
});
});
label {
position: relative;
}
.custom-placeholder {
#font > .proxima-nova-light(26px,40px);
position: absolute;
top: 0;
left: 0;
z-index: 10;
color: #999;
}
<label>
<input type="date" placeholder="Date">
<span class="custom-placeholder">Date</span>
</label>
日付
私はjbarlowのアイデアを取りましたが、onblur関数にifを追加したので、値が空の場合にのみフィールドはその型を変更します
<input placeholder="Date" class="textbox-n" type="text" onfocus="(this.type='date')" onblur="(this.value == '' ? this.type='text' : this.type='date')" id="date">
私の解決策を試してください。入力が埋められているかどうかを知るために 'required'属性を使い、そうでない場合は属性 'placeholder'からのテキストを表示します
//HTML
<input required placeholder="Date" class="textbox-n" type="date" id="date">
//CSS
input[type="date"]:not(:valid):before {
content: attr(placeholder);
// style it like it real placeholder
}
マウスオーバーとクリックで日付ピッカーを開くことでユーザーの基本的な理解を処理するより良い方法を見つけました:
<input type="text" onfocus="(this.type='date')" onmouseover="(this.type = 'date')" onblur="(this.value ? this.type = 'date' : this.type = 'text')" id="date_start" placeholder="Date">
また、Webkitの矢印を非表示にしてクリックをカバーするために幅を100%にします。
input[type="date"] {
position: relative;
}
input[type="date"]::-webkit-calendar-picker-indicator {
position: absolute;
height: 100%;
width: 100%;
opacity: 0;
left: 0;
right: 0;
top:0;
bottom: 0;
}
Angularの観点から私はプレースホルダーを入力タイプdate要素に入れることに成功しました。
まず最初に、私は次のCSSを定義しました。
.placeholder {
color: $text-grey;
}
input[type='date']::before {
content: attr(placeholder);
}
input::-webkit-input-placeholder {
color: $text-grey;
}
これが必要な理由は、css3コンテンツの色が通常のプレースホルダーと異なる場合は、共通のものを使用しなければならなかったためです。
<input #birthDate
class="birthDate placeholder"
type="date"
formControlName="birthDate"
placeholder="{{getBirthDatePlaceholder() | translate}}"
[class.error]="!onboardingForm.controls.birthDate.valid && onboardingForm.controls.birthDate.dirty"
autocomplete="off"
>
次に、テンプレートでviewchildのbirthDate属性を使用して、コンポーネントからこの入力にアクセスできるようにします。そしてplaceholder属性に角度表現を定義しました。これは、placeholderを表示するかどうかを決定します。これは、このソリューションの大きな欠点です。プレースホルダの可視性を管理する必要があるということです。
@ViewChild('birthDate') birthDate;
getBirthDatePlaceholder() {
if (!this.birthDate) {
return;
} else {
return this.birthDate.nativeElement.value === '' ?
'ONBOARDING_FORM_COMPONENT.HINT_BIRTH_DATE' :
'';
}
}
ねえ、私は昨夜同じ問題に遭遇し、あなたの答えすべてといくつかの輝く魔法の組み合わせを考え出しました。
HTML:
<input type="date" name="flb5" placeholder="Datum" class="datePickerPlaceHolder"/>
CSS:
@media(max-width: 1024px) {
input.datePickerPlaceHolder:before {
color: #A5A5A5; //here you have to match the placeholder color of other inputs
content: attr(placeholder) !important;
}
}
JQuery:
$(document).ready(function() {
$('input[type="date"]').change(function(){
if($(this).val().length < 1) {
$(this).addClass('datePickerPlaceHolder');
} else {
$(this).removeClass('datePickerPlaceHolder');
}
});
});
説明:それで、ここで何が起こっているのでしょうか、まず最初にHTMLの中で、これは基本的なHMTL5-date-inputとプレースホルダーの設定をすることでかなり簡単です。次に停止します。CSS、プレースホルダーを偽造するために:before-pseudo-elementを設定します。入力自体からプレースホルダーの属性を取得します。私はこれを1024pxのビューポート幅からのみ利用できるようにしました - なぜimは後で言うつもりです。そしてjQueryという2、3回リファクタリングした後、値が設定されているかどうかに関わらずすべての変更をチェックするこのコードを思いついた。クラスを追加してください。
既知の問題:
それが役立つことを願っています!チェリオ!
HTML:
<div>
<input class="ui-btn ui-btn-icon-right ui-corner-all ui-icon-calendar ui-shadow" id="inputDate" type="date"/>
<h3 id="placeholder-inputDate">Date Text</h3>
</div>
JavaScript:
$('#inputDate').ready(function () {
$('#placeholder-inputDate').attr('style'
, 'top: ' + ($('#placeholder-inputDate').parent().position().top + 10)
+ 'px; left: ' + ($('#placeholder-inputDate').parent().position().left + 0) + 'px; position: absolute;');
$('#inputDate').attr('style'
, 'width: ' + ($('#placeholder-inputDate').width() + 32) + 'px;');
});
あなたがモバイルだけに関心があるならば:
input[type="date"]:invalid:before{
color: rgb(117, 117, 117);
content: attr(placeholder);
}
<input placeholder="Date" type="text" onMouseOver="(this.type='date')" onMouseOut="(this.type='text')" id="date" class="form-control">
Mumthezirの改訂コード
これはjsを使わずにcss content
を使ったハックです。 :after
は一部のブラウザでは入力がサポートされていないため、content attr('')
と同じように別の方法で入力を選択する必要があります。
input[type=date]:invalid+span:after {
content:"Birthday";
position:absolute;
left:0;
top:0;
}
input[type=date]:focus:invalid+span:after {
display:none;
}
input:not(:focus):invalid {
color:transparent;
}
label.wrapper {
position:relative;
}
<label class="wrapper">
<input
type="date"
required="required"
/>
<span></span>
</label>
邪魔にならないjavascriptを念頭に置いて@ mvpのソリューションを拡張する、アプローチは次のとおりです。
HTML:
<input type="text" placeholder="Date" class="js-text-date-toggle">
Javascript:
$('.js-text-date-toggle').on('focus', function() {
$(this).attr('type', 'date') }
).on('blur', function() {
$(this).attr('type'), 'text') }
)
IOS 12のChrome上で私のために解決策のどれも私のために正しく働いていませんでした、そして、それらのほとんどはページの可能な複数の日付入力に対処するように調整されていません。私は次のようにしました、それは基本的に日付入力の上に偽のラベルを作成してタップでそれを削除します。ビューポートの幅が992ピクセルを超えている場合は、偽のラベルも削除します。
JS:
function addMobileDatePlaceholder() {
if (window.matchMedia("(min-width: 992px)").matches) {
$('input[type="date"]').next("span.date-label").remove();
return false;
}
$('input[type="date"]').after('<span class="date-label" />');
$('span.date-label').each(function() {
var $placeholderText = $(this).prev('input[type="date"]').attr('placeholder');
$(this).text($placeholderText);
});
$('input[type="date"]').on("click", function() {
$(this).next("span.date-label").remove();
});
}
CSS:
@media (max-width: 991px) {
input[type="date"] {
padding-left: calc(50% - 45px);
}
span.date-label {
pointer-events: none;
position: absolute;
top: 2px;
left: 50%;
transform: translateX(-50%);
text-align: center;
height: 27px;
width: 70%;
padding-top: 5px;
}
}
これは入力要素としてこれを使用して私のために働きます:
<input name="birthdate" class="" class="wpcf7-form-control wpcf7-date
wpcf7-validates-as-required wpcf7-validates-as-date birthdate" value=""
aria-required="true" aria-invalid="false" placeholder="birthdate *"
type="date">
このCSSは恒久的なプレースホルダーを示しています。選択した値はプレースホルダの後に表示されます。
input[type="date"]:before {
content: attr(placeholder) !important;
margin-right: 0.5em;
display: block;
}
/* only for FF */
@-moz-document url-prefix() {
input[type="date"]:before {
content: attr(placeholder) !important;
margin-right: 0.5em;
display: block;
position: absolute;
left: 200px; /* please adopt */
}
}
私はcontact-form-7プラグインを持つWordpressフォームにこの解決策を使います。
私はあなたがしなければならないのは、日付フィールドがNULL可能であると言うようにモデルを変更し、それが必要ならばそれに[必須]を置くことだけであると思います。これを行うと、プレースホルダテキストが表示されます。