未显示输入类型="日期"字段的占位符

Mum*_* VP 103 html5 datepicker placeholder cordova

荫做了PhoneGap的应用程序,当IAM试图type="date"如下图所示输入字段,,它显示在iPhone日期选择器如我所料,但它不显示我所提供的占位符.我在SO中发现了同样的问题,但在任何地方都没有解决方案,希望有人可以帮助我.谢谢.

 <input placeholder="Date" class="textbox-n" type="date" id="date">
Run Code Online (Sandbox Code Playgroud)

Mum*_* VP 136

这可能不合适......但它终于帮助了我.

<input placeholder="Date" class="textbox-n" type="text" onfocus="(this.type='date')"  id="date"> 
Run Code Online (Sandbox Code Playgroud)

  • 看起来像一个很好的功能,但点击该字段显示屏幕键盘而不是datepicker.不错的尝试. (7认同)
  • 嗯,是一个恶心的.我在日期字段中添加了一个带有文本字段外观的跨度,使其仅在ios上可见.datepicker的z索引高于span,但css为alpha 0.01.Onclick我会透露日期字段.它有效,但有点讨厌. (7认同)
  • 对于cordova应用程序,使用**onmouseenter**事件而不是**onfocus**事件,然后,日期选择器将在第一次单击时打开 (3认同)
  • @MathijsSegers你找到了一个不显示键盘的解决方案吗?我在这里尝试了这个解决方案,但是在iOS 6,7和8中,键盘显示了一段时间,然后显示了日期选择器. (2认同)
  • 我注意到这在iOS设备上不起作用,有人对此有解决方案吗? (2认同)

小智 79

如果您使用mvp的方法但添加onblur事件以将其更改回文本字段,以便在输入字段失去焦点时再次显示占位符文本.它只是使黑客更好一点.

<input placeholder="Date" class="textbox-n" type="text" onfocus="(this.type='date')" onblur="(this.type='text')" id="date">
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

  • 焦点不在时,我可以看到该占位符,但是要获取日期选择器,我需要单击两次。我该如何解决? (3认同)
  • 更好的解决方案.谢谢 (2认同)
  • 真好!非常合适的解决方案。:DI希望HTML5或HTML6不久将允许在日期中使用占位符。但就目前而言,这是一个很好的解决方法。:D (2认同)
  • 日期的格式随着日期/文本类型之间的变化而变化。并且,不适用于 iOS 设备。 (2认同)
  • 现在已经是 2020 年了,我们仍然需要使用 js...想知道这个 `type="date"` 占位符有什么问题以及为什么它的表现与其他占位符不同... (2认同)

fen*_*tas 30

我最终使用了以下内容.

input[type="date"]:not(.has-value):before{
  color: lightgray;
  content: attr(placeholder);
}
Run Code Online (Sandbox Code Playgroud)
<input type="date" placeholder="MY PLACEHOLDER" onchange="this.className=(this.value!=''?'has-value':'')">
Run Code Online (Sandbox Code Playgroud)

  • 此版本不会与其他类混淆 `&lt;input type="date" placeholder="MY PLACEHOLDER" onchange="this.classList.toggle('has-value',this.value);"&gt;` (4认同)

小智 20

我在我的CSS中用过这个:

input[type="date"]:before{
    color:lightgray;
    content:attr(placeholder);
}

input[type="date"].full:before {
    color:black;
    content:""!important;
}
Run Code Online (Sandbox Code Playgroud)

并将这样的somenthing放入javascript:

$("#myel").on("input",function(){
    if($(this).val().length>0){
    $(this).addClass("full");
}
else{
   $(this).removeClass("full");
   }
 });
Run Code Online (Sandbox Code Playgroud)

它适用于我的移动设备(Ios8和Android).但我使用jquery输入掩码用于桌面输入文本类型.如果您的代码在ie8上运行,这个解决方案是一个很好的方法.


rom*_*gon 16

截至今天(2016年),我已成功使用这两个片段(加上它们与Bootstrap4配合使用).

在左侧输入数据,在左侧输入占位符

input[type=date] {
  text-align: right;
}

input[type="date"]:before {
  color: lightgrey;
  content: attr(placeholder) !important;
  margin-right: 0.5em;
}
Run Code Online (Sandbox Code Playgroud)

单击时占位符消失

input[type="date"]:before {
  color: lightgrey;
  content: attr(placeholder) !important;
  margin-right: 0.5em;
}
input[type="date"]:focus:before {
  content: '' !important;
}
Run Code Online (Sandbox Code Playgroud)


Fra*_*pré 14

我采用了 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">
Run Code Online (Sandbox Code Playgroud)


小智 10

这个对我有用:

input[type='date']:after {
  content: attr(placeholder)
}
Run Code Online (Sandbox Code Playgroud)

  • 唯一的问题是选择日期后删除占位符。占位符不会被删除。 (3认同)
  • 选择日期后,只需添加`onfocus =“(this.placeholder =”'')“`即可删除占位符。 (2认同)

int*_*2_t 9

根据HTML标准:

不得指定以下内容属性,并且不适用于该元素:accept,alt,checked,dirname,formaction,formenctype,formmethod,formnovalidate,formtarget,height,inputmode,maxlength,minlength,multiple,pattern,placeholder,size, src和宽度.

  • @mvp,您不应该使用占位符属性,并将<label>元素与输入[type = date]相关联. (2认同)
  • 标签和占位符是两个不同的东西.我不明白你在这里建议什么. (2认同)
  • 这是唯一正确的答案。+1。想知道人们怎么了!刚从一个伪造的目标中发现了这个问题,并且对接受的答案的票数感到惊讶:(规范中明确指出“必须不指定”和“不适用”这两个词,但人们仍然想将其塞入他们糟糕的网络应用。 (2认同)

Dav*_*ram 9

我使用了这个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');
    });
});
Run Code Online (Sandbox Code Playgroud)


小智 8

找到了解决问题的更好方法。我认为这会对您有所帮助。聚焦后,该框会将类型更改为文本,以便显示占位符。重点关注时,其类型会更改为日期,因此将显示日历视图。

<input placeholder="Date" class="textbox-n" type="text" onfocusin="(this.type='date')" onfocusout="(this.type='text')"  id="date"> 
Run Code Online (Sandbox Code Playgroud)


Yur*_*uri 7

根据deadproxor和Alessio的回答,我会尝试只使用CSS:

input[type="date"]::before{
    color: #999;
    content: attr(placeholder) ": ";
}
input[type="date"]:focus::before {
    content: "" !important;
}
Run Code Online (Sandbox Code Playgroud)

如果您需要在输入中写入内容后使占位符不可见,我们可以尝试使用:valid和:invalid选择器,如果您的输入是必需的.

编辑

如果您在输入中使用了以下代码:

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;
}
Run Code Online (Sandbox Code Playgroud)
<input type="date" placeholder="Date" required>
Run Code Online (Sandbox Code Playgroud)


小智 7

<input placeholder="01-01-2021" class="textbox-n" type="text" onfocus="(this.type='date')" onblur="(this.type='text')" id="date" />
Run Code Online (Sandbox Code Playgroud)