完美解决input输入在苹果IOS系统下预输入导致的bug,兼容手机端IOS、Android系统

时间: 作者:admin 浏览:

正常情况下,我们监听input值变化所用的兼容性较好的方法是:

$("input").on("input propertychange",function(){
   //回调事件
})

上面的方法,在PC端可以完全兼容所有浏览器,但是手机端中,IOS系统下键盘预输入的时候会有问题,安卓中是没有问题的;
以下的方法就是解决IOS下预输入问题的,但在PC端中兼容性不好,所以最后的解决办法是,PC端中就用上面的方法,如果是手机端则用下面的方法;

用法:

$(selecter).InputEventClearPre({
    MaxLength:'',//输入框能输入的最大长度,默认不限制,填写则限制
    callback:function($self,valLength,index){
        //$self 代表绑定对象本身;
        //valLength 是输入框的字符总长度/如果要限制输入数字等,不要用valLength,建议用$self.val().length;
        //index 是绑定对象的下标,对象集时多用
    }
})

详细代码:

$.fn.InputEventClearPre = function(options){
    var defaults = {
        MaxLength:'',//输入框能输入的最大长度,默认不限制,填写则限制
        callback:function($self,valLength,index){
            //$self代表绑定对象本身;
            //valLength是输入框的字符总长度
            //index是绑定元素的下标,对象集的时候多用;
        }
    };
    var opts = $.extend({},defaults,options || {});
    var renderclass = {
        render:"inputRender"
    };
    var cpLock = [];
    return this.each(function(i){
        cpLock[i] = false;
        var $self=$(this);
        $self.addClass(renderclass.render);
        $self.on('compositionstart', function(){
            cpLock[i] = true;
        });
        $self.on('compositionend', function(){
            cpLock[i] = false;
            var self=$(this);
            if(!cpLock[i]){
                if(opts.MaxLength){
                    if(self.val().length>(opts.MaxLength-0)){
                        self.val(self.val().substring(0,opts.MaxLength-0));
                        if(typeof opts.callback=='function'){
                            opts.callback(self,self.val().length,i);
                        }
                    }else{
                        if(typeof opts.callback=='function'){
                            opts.callback(self,self.val().length,i);
                        }
                    }
                }else{
                    if(typeof opts.callback=='function'){
                        opts.callback(self,self.val().length,i);
                    }
                }
            }
        })
        $self.on('input', function(){
            var self=$(this);
            if(!cpLock[i]){
                if(opts.MaxLength){
                    if(self.val().length>(opts.MaxLength-0)){
                        self.val(self.val().substring(0,opts.MaxLength-0));
                        if(typeof opts.callback=='function'){
                            opts.callback(self,self.val().length,i);
                        }
                    }else{
                        if(typeof opts.callback=='function'){
                            opts.callback(self,self.val().length,i);
                        }
                    }
                }else{
                    if(typeof opts.callback=='function'){
                        opts.callback(self,self.val().length,i);
                    }
                }
            }
        });
    })
}
微信公众号
微信公众号:
  • 前端全栈之路(微信群)
前端QQ交流群
前端QQ交流群:
  • 794324979
  • 734802480(已满)

更多文章

栏目文章


Copyright © 2014-2023 seozhijia.net 版权所有-粤ICP备13087626号-4