移动端input文本框默认的焦点行为会弹起软键盘输入法,如果直接设置readonly则聚焦不了,因为需要多次聚焦,每次都弹出键盘又影响用户体验机页面美观
最近遇到一个问题,就是h5移动端,input文本框聚焦会弹出输入法,而我需要外接称重设备,称重设备会把重量回传到屏幕的光标处,也就是说我这个input框需要一直聚焦,无论用户点哪里最后还要聚焦到这个文本框,重量回传后,用户可能要手动修改,我这里用html写了个小键盘,方便用户输入及修改用户填完重量选择运输方式后继续称重,所以就需要光标始终在这个框内.
所以我是这样做的,给文本框加上autofocus 属性,这样页面加载中会聚焦到此文本框.且不会弹出软键盘.
<input class="rowWeight" autofocus placeholder="过称或输入重量" datatype="text" inputmode="decimal" desc="重量" type="text" id="WEIGHT" name="WEIGHT" >
但是后续重新聚焦会弹起软键盘,所以我们需要对该元素的会弹起键盘的时间进一步处理,先处理该元素的获取到焦点的的事件,获取焦点时立刻设置成只读状态,延迟200毫秒后移除只读属性,这时候你会发现光标还是会在文本框内,不过不会弹出输入法;我这里是需要无论客户怎么操作焦点都会在文本框内,所以对失去焦点做了处理,元素失去焦点后500毫秒后重新获取焦点.需要注意的是元素的点击事件也会触发弹起软键盘,所以我们还得对点击事件做处理,我这里的处理方法是点击元素直接使元素失去焦点,由失去焦点事件处理500好毫秒重新聚焦. (注意长按文本框也回弹起软键盘,也得进一步处理)如果你们有更好的方法欢迎评论.
$(function(){
$("#WEIGHT").focus(function () {//处理聚焦事件
var obj = $(this);
obj.prop("readonly","readonly");//元素设置成只读 这样就不会弹起软键盘了
setTimeout(function(){/100毫秒后解除只读属性
obj.removeAttr("readonly")/
},100)
}).blur(function () {//处理失焦事件
var obj = $(this);
setTimeout(function(){//500毫秒后重新聚焦
obj.focus();
},500);
}).on("click",function(){//这里点击事件也会弹起软键盘,也处理一下
$(this).blur();//点击后立即失去焦点,有失去焦点事件处理
})
})