【问题标题】:"input type=date" placeholder on iOS?iOS上的“输入类型=日期”占位符?
【发布时间】:2012-03-26 05:12:30
【问题描述】:

我目前正在开发一个针对 iPhone/iPad 的网站。

将输入类型设置为日期会将字段外观更改为下拉菜单,并且适用于文本字段的占位符属性仅显示在桌面版本上,而不显示在 iPhone 上。有没有解决的办法?

这是它目前的样子; http://i44.tinypic.com/2u91xsz.png

我想去掉那个截止日期文本,并有一些类似于它上面的下拉菜单的东西。

它基本上只是为了让我可以让用户知道他们正在输入什么,而无需在屏幕上使用任何额外的空间,所以如果没有解决方案,这不是最大的问题。

【问题讨论】:

标签: iphone html placeholder


【解决方案1】:

适用于文本字段的占位符属性仅显示在 桌面版,不是在iphone上。有没有办法解决这个问题?

尝试使用 javascript 和 css。

<div id="closing_date">
<label for="closing_date_field" class="overlabel">Closing Date</label>
<input id="closing_date_field" type="date" name="closing_date">
</div>

见代码here

【讨论】:

  • 对不起,我可能没有解释得最好。它需要保持为输入类型=日期。这就是它目前的样子:img.photobucket.com/albums/v605/MANU80/e24e70b5.jpg,我想去掉那个截止日期文本,并有一些类似于它上面的下拉菜单的东西。
  • 将输入类型更新为最新。这实质上是使用 javascript 在输入中添加一个“占位符”。
  • 恐怕它仍然不起作用,占位符属性在桌面上有效,但我认为它不适用于 safari,它仍然显示为空白下拉菜单。
  • 这方面有进展吗?谢谢
  • @Kai 抱歉,之前错过了您的陈述。请参阅更新的答案。我已经使用支持 html5 的浏览器测试了 jsfiddle 链接,此时它是 opera(版本 11.61 build 1250)。 “结束日期”标签显示在输入日期字段本身上,如果从下拉日历中选择日期,则现在显示该值。
【解决方案2】:

我已经使它与一些 ":before" 伪类和一小部分 javascript 一起工作。 您的输入必须有一个类或 id。这是一个 id 为“myInput”的示例

 #myInput:before{ content:"Date of birth"; width:100%; color:#AAA; } 
 #myInput:focus:before,
 #myInput.not_empty:before{ content:none }

然后在 javascript 中,根据 onChange 和 onKeyUp 事件中的值添加“not_empty”类。

您甚至可以在每个日期字段上动态添加所有这些内容。

这是一个粗略的代码:

$('input[type=date]').each(function(){
    var input=$(this);
    var id=input.attr('id');
    if (!id){
        id='RandomGeneratedId_'+Math.random().toString(36).substring(7);
        input.attr('id',id);
    }
    var placeholder=input.attr('placeholder');
    if (placeholder){
        $('head').append('<style> #'+id+':before{ content:"'+placeholder+'"; width:100%; color:#AAA; } #'+id+':focus:before,#'+id+'.not_empty:before{ content:none }</style>');
    }
    input.on('change keyup',function(){
        if ($(this).val()){
            $(this).addClass('not_empty')
        }else{
            $(this).removeClass('not_empty')
        }
        return false;
    });
});

它并不完美,但在 Chrome 和 iOS7 网络视图中运行良好

【讨论】:

  • 您可以使用:content:attr(placeholder); 允许 HTML 设置内容。
  • 好主意!会试一试并更新我的答案,谢谢。这应该可以清理一些 JS 代码
  • 我们现在将此代码用于我们的 Cobalt 混合框架 (cobaltians.org),我们在其中开发了一个原生 datePicker 组件来简化此类输入的使用。该框架还可以帮助您在页面和原生操作栏之间进行原生转换
【解决方案3】:

我花了一些时间才弄清楚这个,把它保留为 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">

【讨论】:

  • 这似乎工作正常,但是在 iOS 9.x 上,当我第一次点击输入时,它会卡在文本输入状态和日期输入状态之间的某个位置。
  • 是的,问题在于它需要点击两次。一种是更改日期,另一种是实际打开日期选择器。
猜你喜欢
  • 2015-09-06
  • 1970-01-01
  • 2013-06-30
  • 2021-02-03
  • 2017-05-15
  • 2013-12-17
  • 2020-01-30
  • 2019-08-22
相关资源
最近更新 更多