聚焦<input>时防止iPhone默认键盘


82

这就是我正在尝试的方式

<script type="text/javascript">
     $(document).ready(function(){
        $('#dateIn,#dateOut').click(function(e){
            e.preventDefault();
        }); 
     });
</script>

但输入仍然“启动” iPhone的键盘

ps:我想这样做是因为我使用datepicker插件作为日期

Answers:


227

通过将属性readonly(或readonly="readonly")添加到输入字段,您应该防止任何人在其中输入任何内容,但仍然能够在其上启动click事件。

当您使用日期/时间选择器时,这在非移动设备中也很有用


2
嗯!谢谢!但是日期选择器是否可以设置所选值?
托尼·米歇尔·考贝特

9
是的,它会的。只读仅适用于用户,不适用于JavaScript。
Rene Pot

4
-1,因为这不是一个非常可靠的方法。输入从技术上讲不是“只读”的,因此自动制表(使用tabindex =“ x”)之类的东西不起作用
Patrick

Tabindex似乎仍对我有效。但是我不能使用,readonly因为某些小部件不会在readonly输入上绑定事件。
Pierre de LESPINAY 2014年

1
请注意:readonly是布尔型HTML属性,意味着它的存在指示该值。您只需要“只读”,而不需要“ readonly = {true | readonly | etc}”
contactmatt

11

您可以在DatePicker中添加一个回调函数,以告诉它在显示DatePicker之前模糊输入字段。

$('.selector').datepicker({
   beforeShow: function(){$('input').blur();}
});

注意:iOS键盘将出现一秒钟,然后隐藏。


1
谢谢,这也适用于android。对于Android,它甚至没有出现
timaschew

1
在android中
无法

1
到目前为止对我来说最好的答案。我几乎放弃了。
Thiago Elias

很棒而优雅的把戏,谢谢。它可以在iPhone + Android上运行。
伊洛林'17

4

由于我无法评论最上面的评论,因此我不得不提交“答案”。

所选答案的问题在于,将字段设置为只读会使该字段脱离iPhone上的制表符顺序。因此,如果您喜欢通过单击“下一个”来输入表单,则将跳过该字段。


1
这是有道理的,只读不会让用户更改值(仅使用JavaScript),所以我想它会自然地跳过它
Toni Michel Caubet

1
但是,在经过测试的台式机浏览器(包括Safari / mac)上,使用制表符可将您带到只读字段。
约翰·万斯

1
@JohnVance即使设置了tab-index属性也是如此吗?还是会覆盖效果?(我之所以问是因为我没有iPhone,但希望您对此有所了解)
Fernando Silva 2014年

1
@FernandoSilva我已经在iPhone Safari上对此进行了测试,使用tab-index仍然可以跳过该字段。
Betty

4

我在这里问了类似的问题,得到了一个很棒的答案-使用iPhone原生的datepicker-很棒。

如何关闭网页上指定输入字段的iPhone键盘

简介/伪代码:

if small screen mobile device 

  set field type to "date" - e.g. document.getElementById('my_field').type = "date";
  // input fields of type "date" invoke the iPhone datepicker.

else

  init datepicker - e.g. $("#my_field").datepicker();

将字段类型动态设置为“日期”的原因是,Opera将弹出自己的本机日期选择器,否则,我假设您想在桌面浏览器上始终显示日期选择器。


1
问题是可用的日期已经设置了可用的日期或不可用的日期。
Toni Michel Caubet

4

下面的代码对我有用:

<input id="myDatePicker" class="readonlyjm"/>


$('#myDatePicker').datepicker({
/* options */
});

$('.readonlyjm').on('focus',function(){
$(this).trigger('blur');
});

3

根据我的观点,解决此问题的最佳方法是使用“ ignoreReadonly”。

首先将输入字段设置为只读,然后添加ignoreReadonly:true。这样可以确保即使文本字段为readonly,也会显示弹出窗口。

$('#txtStartDate').datetimepicker({
            locale: "da",
            format: "DD/MM/YYYY",
            ignoreReadonly: true
        });
        $('#txtEndDate').datetimepicker({
            locale: "da",
            useCurrent: false,
            format: "DD/MM/YYYY",
            ignoreReadonly: true
        });
});

0

所以这是我的解决方案(类似于John Vance的回答):

首先,请转到此处并获得检测移动浏览器的功能。

http://detectmobilebrowsers.com/

他们有很多不同的方法来检测您是否在移动设备上,因此请找到一种适合您所使用的方法。

您的HTML页面(伪代码):

If Mobile Then
    <input id="selling-date" type="date" placeholder="YYYY-MM-DD" max="2999-12-31" min="2010-01-01" value="2015-01-01" />
else
    <input id="selling-date" type="text" class="date-picker" readonly="readonly" placeholder="YYYY-MM-DD" max="2999-12-31" min="2010-01-01" value="2015-01-01" />

jQuery的:

$( ".date-picker" ).each(function() {
    var min = $( this ).attr("min");
    var max = $( this ).attr("max");
    $( this ).datepicker({ 
        dateFormat: "yy-mm-dd",  
        minDate: min,  
        maxDate: max  
    });
});

这样,您仍然可以在移动设备中使用本机日期选择器,同时仍然可以通过任何一种方式设置最小和最大日期。

非移动字段应为只读,因为如果像chrome for ios这样的移动浏览器“要求桌面版本”,则它们可以绕过移动检查,并且您仍然希望阻止键盘显示。

但是,如果该字段是只读的,则它看起来就像用户无法更改该字段一样。您可以通过更改CSS使其看起来像不是只读的(即,将边框颜色更改为黑色)来解决此问题,但是除非更改所有输入标签的CSS,否则很难在整个外观上保持一致浏览器。

为了弄清楚,我只是将日历图像按钮添加到日期选择器中。只需稍微更改您的JQuery代码即可:

$( ".date-picker" ).each(function() {
    var min = $( this ).attr("min");
    var max = $( this ).attr("max");
    $( this ).datepicker({ 
        dateFormat: "yy-mm-dd",  
        minDate: min,  
        maxDate: max,
        showOn: "both",
        buttonImage: "images/calendar.gif",
        buttonImageOnly: true,
        buttonText: "Select date"
    });
});

注意:您将必须找到合适的图像。



0

我有一个通用的“无键盘”脚本-适用于Android和iPhone:

  $('.readonlyJim').on('focus', function () {
      $(this).trigger('blur')
  })

只需附加添加类 readonlyJim到输入标签并瞧瞧。

(*对不起这里的星际迷航)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.