jquery focus() 手机端无效

因为 onmouseup event 造成的选取失效, 

只要加上以下设定即可:
$("#obj_id").mouseup(function(e){
e.preventDefault();
});

受mouseup影响。。可以参考这样处理:HTML code<input type="text" value="value" onfocus="this.focused=true;this.select();" onmouseup="if(this.focused){this.focused=false;return false;}"/>



/*
以下为转载:
*/

在一般的正常浏览器上,可以用 javascript 来 focus 到一个输入框上:

1 var elem = document.getElementById(‘inputElementId’);
2 elem.focus();

但是在 iOS 的 mobile safari 上,这样的代码不起作用。在 stackoverflow 上也有不少人提问,比如这篇 Programmatically selecting text in an input field on iOS devices (mobile Safari)  。但帖子里的方法都没有起作用。

经过一些实验,目前的结论是:

只有在监听了用户出发的事件的函数中执行 focus 才有用。

比如说这样:

1 var button = document.getElementById(‘btn’);
2 var inputElem = document.getElemntById(‘input-elem’);
3 button.addEventListener(‘click’, function(ev){
4     inputElem.focus();
5 });

这种场景下就可以生效。经过测试,在 iOS 和 Andriod 的默认浏览器上测试都一样,根据上面帖子里的说法,应该是 webkit 的 bug(或者 feature?)。根据挖出来的老帖,似乎在 S60 的系统中很久以前这个问题就一直存在了。

甚至这样的代码也可以工作:用了 jQuery 中的自定义事件

1 $.subscribe(‘testevent’,function(ev){
2     $(‘#test’).focus();
3 });
4 $(‘#btn’).click(function(ev){
5     $.publish(‘testevent’)
6 });

如果要在 mobile safari 中对 input 进行 focus 操作,就只能在这样的限制下工作了。

声明: 本文采用 BY-NC-SA 协议进行授权. 转载请注明转自: javascript 在 mobile safari 上无法对 input 元素 focus 的问题
posted @ 2016-09-13 17:04  gubook  阅读(5653)  评论(0编辑  收藏  举报