仿微软IP输入控件

因为自己工作的原因,经常会用到IP输入这样的功能,为了工作的便捷性,自己基于jQuery封装了一个防微软的IP输入控件。虽然并不完全和微软输入IP一样。但是基本完成需求。稍微有点bug,(一直按着删除键,如果开始输入时不在输入框的结尾,将无法实现全部删除)。下面是具体代码:

function ipControl(ip_box, ip, ip_one, ip_two, ip_three, ip_four, dot, dot_one, dot_two, dot_three, dot_four) {
    var html = '';
    html += '<div id="' + ip + '">';
    html += '<input type="text" id="' + ip_one + '"/>';
    html += '<input type="text" id="' + ip_two + '"/>';
    html += '<input type="text" id="' + ip_three + '"/>';
    html += '<input type="text" id="' + ip_four + '"/>';
    html += '</div>';
    html += '<div id="' + dot + '">';
    html += '<span id="' + dot_one + '">.</span>';
    html += '<span id="' + dot_two + '">.</span>';
    html += '<span id="' + dot_three + '">.</span>';
    html += '</div>';
    $('#' + ip_box).html(html);
    //设置样式

$('#' + ip_box).css({
    'display': 'inline-block',
    'width': '170px',
    'position': 'relative'
});
$('#' + ip).css({
    'width': '100%',
    'display': 'inline-block',
    'position': 'relative',
    'border': '1px solid #cccccc',
    'display': 'flex',
    'justify-content': 'space-around'
})
$('#' + ip + ' input').css({
    'width': '40px',
    'height': '20px',
    'text-align': 'center',
    'border': 'none',
    'outline': 'none'
})
$('#' + dot + ' span').css('position', 'absolute');
$('#' + dot + ' #' + dot_one).css({
    'top': '4px',
    'left': '39px'
})
$('#' + dot + ' #' + dot_two).css({
    'top': '4px',
    'left': '82px'
})
$('#' + dot + ' #' + dot_three).css({
    'top': '4px',
    'left': '126px'
})

//设置输入规则
$('#' + ip + ' input').on('input',function(){
    var itemVal = $(this).val();
    var val = Number(itemVal);
    if(isNaN(val) || val>255){
        $(this).val('');
        return false;
    }
})
var backSpaceNum = 0;
//keydown事件
$('#' + ip + ' input').on('keydown', function(event) {
    $(this).val($(this).val().replace(/[^0-9]/g, ''));
    var keycode = event.keyCode ? event.keyCode : event.which;
    console.log(keycode)
    //只能输入数字以及部分功能键
    if((keycode >= 48 && keycode <= 57) || keycode == 8 || keycode == 9 || keycode == 37 || keycode == 38 || keycode == 39 || keycode == 40 || keycode == 46 || keycode == 123 || (keycode >= 96 && keycode <= 105)) {
        if(keycode == 8 && $(this).val() == '') {
            if($(this).attr('id') == ip_one) {
                return false;
            }
            $(this).prev().focus();
            if(document.selection){
                var rtextRange = $(this).prev().createTextRange();
                rtextRange.moveStart('character',$(this).prev().val().length);
                rtextRange.collapse(true);
                rtextRange.select();
            }else if(typeof $(this).prev().selectionStart=='number' && typeof $(this).prev().selectionEnd=='number'){
                $(this).prev().selectionStart = $(this).prev().val().length;
            }
        }
//Tab键
//          if(keycode == 9) {
//              var nextVal = $(this).next().val();
//              $(this).next().val('').focus().val(nextVal);
//          }
            if($(this).val().length > 2
             && keycode != 8 
             && keycode != 9 
             && keycode != 37 
             && keycode != 39 
             && keycode != 46) {
                if($(this).attr('id') == ip_four || $(this).val().length > 3) {
                    return false;
                }
                $(this).next().focus();
            }
            if($(this).val() > 255) {
                alert($(this).val() + '不是一个有效值');
                $(this).val('');
                $(this).focus();
            }
            //去掉开头0
            if($(this).val() != ''){
                var strip = $(this).val();
                $(this).val(parseInt(strip));
                if($(this).val().length<3){
                    $(this).focus();
                }
            }

    } else {
        return false;
    }

}).focus(function() {
    if(this.id == ip_four) {
        return;
    }
    this.nextElementSibling.style.imeMode = 'disabled';
});
//keyup事件
$('#'+ip+' input').on('keyup',function(event){
    var keycode = event.keyCode?event.keyCode:event.which;
    $(this).val($(this).val().replace(/[^0-9]/g,''));
    //连续输入
    if($(this).val().length>2 
    && keycode != 8 && keycode != 9 && ((keycode>=48&&keycode<=57) || (keycode>=96&&keycode<=105))){
        var nextVal = $(this).next().val();
        $(this).next().val('').focus().val(nextVal);
    }
    //不能大于255
    if($(this).val()>255){
        alert($(this).val() + '不是一个有效值');
        $(this).val('');
        $(this).focus();
    }

    //去掉开头0
    if($(this).val() != ''){
        var strip = $(this).val();
        $(this).val(parseInt(strip));
        if($(this).val().length<3){
            $(this).focus();
        }
    }
    //输入 .
    if(keycode == 110 || keycode == 190){
        nextVal = $(this).next().val();
        $(this).next().val('').focus().val(nextVal);
    }

})

//keypress事件
$('#'+ip+' input').on('keypress',function(event){
    var keycode = event.keyCode?event.keyCode:event.which;
    if((keycode>=48 && keycode <=57) || keycode == 8 || keycode == 9 || keycode == 37 || keycode == 39 || keycode == 46 || keycode == 123){
        return true;
    }else{
        return false;
    }
}).focus(function(){
    this.style.imeMode = 'disabled';
})

}

将代码直接复制在js里,并调用此函数,其中ip_box实参为:

<div id="ip_box"></div>

传的实参即为id,可以通过ID获取对应值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值