在iOS8 Safari中,只读input处理不正确
在Safari,iOS8中,聚焦于date或时间input会打开date或时间select器,并允许编辑只读input的内容。
在文本input中进行对焦时,工具栏的底部会显示上一个,下一个和完成button,在点按完成或点击页面上的其他input之后才会离开。
当input从Javascript以编程方式聚焦时,没有任何事情发生,但是:如果触摸事件监听器被添加到页面的某个部分,触摸任何地方都会popupdate,时间select器或工具栏,即使监听器为空。
示例代码:
<input id="test1" readonly /> <input id="test2" type="date" readonly /> <input id="test3" type="time" readonly /> <script> document.getElementById('test1').focus(); window.addEventListener('touchstart', function () {}); </script>
现场示例: http : //jsfiddle.net/cw3hump4/embedded/result/
任何想法或解决方法如何避免这种情况?
更新:
出于可用性/可访问性的原因,我需要焦点pipe理:点击input打开一个对话框,当对话框closures时,我把焦点放回到input。 该input必须是只读的,以防止软键盘/dateselect器/时间select器popup,但不能被禁用,所以我可以设置一个值,并专注于它。
我认为这是Safari iOS8中的一个错误
这是jQuery的解决方法。
$(function() { $('input[readonly]').on('touchstart', function(ev) { return false; }); });
编辑:
这个怎么样?
$(function() { $('input[readonly]').on('focus', function(ev) { $(this).trigger('blur'); }); });
尝试将input元素包装在表单元素中
<form><input id="test1" readonly /></form> <form><input id="test2" type="date" readonly /></form> <form><input id="test3" type="time" readonly /></form>
Ios8不喜欢那些没有包含在表单元素中的input元素,似乎是ios8中的一个bug。