iphone ios10+等解决点击select焦点错位问题

422 阅读1分钟

由于苹果的select会在底部弹出选择框,因此会页面过长会造成页面的滑动,从而二次触发焦点重新聚焦,导致焦点错位。 例子:

input

select

input

点击select后,会立即跳转为input,从而展示是输入框而不是选择框。

1.juqery解决,把select的滑动默认触发事件禁止

$('select').on('touchstart',function(e){
    e.preventDefault();
})

2.修改fastCick.js文件

  • A方法 找到以下代码
if(!deviceIsIOS || targetTagName !== 'select'){
    this.targetElement = null;
    event.preventDefault();
}

改为

this.targetElement = null;
event.preventDefault();
  • B方法
FastClick.prototype.onTouchStart=function(event){
    var targetElement,touch,selection;
    if (event.targetTouches.length > 1) {
        return true;
    }

    targetElement = this.getTargetElementFromEventTarget(event.target);
    touch = event.targetTouches[0];

    if (deviceIsIOS) {
        //add by 我 解决select 点击老跳转的问题 begin
        var nodeName = targetElement.nodeName.toLowerCase();
        var typeAttribute = targetElement.getAttribute('type');
        if (nodeName === "select"){
            return false;
        }
        //add by 我 解决select 点击老跳转的问题  end`
...