JS报名组件(依赖JQ)

这是我自己写的一个报名组件,为了编写方便,依赖了JQ,直接上代码。

HTML:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <title></title>
    <style>
        div{height:1000px;}
        form{margin-top:100px;position:relative;}
        i{font-style:normal;}
        li{height:40px;list-style:none;}
        li a{border-radius:4px;border:1px solid #000;padding:5px 10px;font-size:20px;color:#333;text-decoration: none;}
        li a:active{background:#eee;}
    </style>
</head>
<body>
<form action="" id="join_us">
    <ul>
        <li>
            <i>姓名:</i><input type="text" name="name"/>
        </li>
        <li>
            <i>电话:</i><input type="text" name="mobile"/>
        </li>
        <li>
            <i>地址:</i><input type="text" name="address"/>
        </li>
        <li>
            <a href="javascript:;" class="submit">立即报名</a>
        </li>
    </ul>
</form>
<script type="text/javascript"  src="http://cdn.bootcss.com/jquery/1.9.1/jquery.min.js"></script>
<script src="../../src/js/modules/commonReg.js"></script>
<script>
    $(".submit").click(function(){
        //调用报名方法
        QuickReg.Rerver("测试报名","#join_us",function(e){
            console.log(e);
            QuickReg.msg("报名成功!");
        });
    })
</script>
</body>
</html>

commonReg.js:

function RegCommonFun(){
    //报名接口地址(此地址为我本地接口,测试时请修改为正确的接口地址)
    this.appointment="http://test.signup.com/api/order/appointment";
    this.timer=null;
}

/**
 * 延迟执行删除节点函数
 * @param el   需要移除的节点
 * @param time 延迟时间
 */
RegCommonFun.prototype.removeDom=function(el,time){
    var runTime=time ? time : 2200;
    if(this.timer!=null){
        clearTimeout(this.timer);
    }
    this.timer=setTimeout(function(){
        $(el).remove();
    },runTime);
};

/**
 * 弹出层提示UI
 * @param message 弹出层消息
 * @param iEl 弹出层元素
 */
RegCommonFun.prototype.tips=function(message,iEl){
    var container=$(".reg_layer_tip");
    var elTop=iEl.offset().top;
    var elLeft=iEl.offset().left;
    if(container.length>0){
        container.remove();
        clearTimeout(this.timer);
    }
    if(message && typeof message=="string"){
        var layerHtml='<div class="reg_layer_tip" style="display:none;top: 150px;left: 50%;width:auto !important;height:auto !important;margin: 0;padding: 0;border-radius:4px;">'+
            '<div class="layer_tip_container" style="background:#000001;width:auto !important;height:auto !important;color:white;padding:8px 12px;font-size:12px;border-radius:4px;position:relative;box-shadow: 2px 2px 10px rgba(0,0,0,.3);">'+
            '   <span>'+message+'</span>'+
            '   <i class="layer_round_note" style="display:inline-block;position:absolute;bottom:-8px;width:0;height:0; border-top:12px solid #000001;border-left: 12px solid transparent; "></i>'+
            '</div>'+
            '</div>';
        $("body").append(layerHtml);
        $(".reg_layer_tip").fadeIn("fast").css({display:"block",position:"absolute",top:elTop-42,left:elLeft});

        this.removeDom(".reg_layer_tip");

    }
};

/**
 * 弹窗提示UI
 * @param msg
 */
RegCommonFun.prototype.msg=function(msg){
    if(!msg){
        return;
    }
    if($(".reg_layer_msg").length>0){
        $(".reg_layer_msg").remove();
        clearTimeout(this.timer);
    }
    var html='<div class="reg_layer_msg" style="display:none;position:fixed;top:43%;width:auto !important;height:auto !important;margin: 0;padding: 0;border-radius:8px;">' +
        '          <div class="layer_msg_container" style="width:auto !important;height:auto !important;background:rgba(0,0,0,.5);padding:15px 20px;color:white;border-radius:8px;font-size:14px;">'+msg+'</div>' +
        '     </div>';
    $("body").append(html);
    var htmlLeft=$(".reg_layer_msg").width();//获取msg弹窗宽度
    var screenWidth=$(window).width();//获取浏览器可见区域宽度

    //获取弹窗宽度及浏览器可见区域宽度计算弹窗居中位置
    $(".reg_layer_msg").fadeIn("fast").css({position:"absolute",left:(screenWidth/2)-(htmlLeft/2)});

    this.removeDom(".reg_layer_msg");
};

//这里使用jsonp提交数据到PHP服务器
RegCommonFun.prototype.ajax=function(url,data,method){//ajax
    var _this=this,
        date=new Date();
    if(_this.ajaxment){return false;}
    _this.ajaxment=true;
    jQuery.ajax({url:url+"?t="+date.getTime(),type:'POST',dataType: 'jsonp',data:data,
        timeout: 5000,
        jsonp:'callback',
        error: function(){
            _this.ajaxment=false;
            return false;
        },
        success: function(data){
            _this.ajaxment=false;
            return method(data);
        }
    });
};

RegCommonFun.prototype.Rerver=function(title,el,callback){
    var _this=this;
    var _thisEl=$(el),
        name=_thisEl.find("input[name='name']"),
        mobile=_thisEl.find("input[name='mobile']"),
        address=_thisEl.find("input[name='address']"),
        extendParam=_thisEl.find("input[name='extendparam']"),//额外参数
        remark=_thisEl.find("input[name='remark']"),
        category=title ? title : jQuery("title").html(),
        //手机验证
        myReg = /^(((13[0-9]{1})|(14[0-9]{1})|(17[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$/;

    var params={
        "name":name.val(),
        "mobile":mobile.val(),
        "address":address.val(),
        "extendparam": !extendParam.val() ? '' : extendParam.val(),//额外参数
        "category":category,
        "remark":remark.val()
    };

    if(name.length>0){
        if(params.name==""||params.name=="姓名"){
            _this.tips("请输入姓名",name);
            return;
        }
    }
    if(params.mobile=="请输入您的手机号"||params.mobile==""||!myReg.test(params.mobile)){
        _this.tips("请输入正确的手机号码",mobile);
        return;
    }
    if(address.length>0){
        if(params.address=="请输入所在城市" || params.address==""){
            _this.tips("请输入所在城市",address);
            return;
        }
    }

    //提交请求
    _this.ajax(_this.appointment,params,function(e){
        _thisEl.find("input[name='name']").val("");  //防止重复提交,点击之后清空姓名栏

        //有自定义回调函数时执行自定义函数
        if(callback && typeof callback=="function"){
            return callback(e);
        }

        if(e.status==200){
            _this.msg('报名成功!');
        }else{
            var msg=e.msg=="" ? "服务器繁忙,请稍后再试!" :e.msg;
            _this.msg(msg);
        }
    });
};

var QuickReg=new RegCommonFun();

我们来看看运行效果:

参数错误时:
这里写图片描述

报名成功之后(会自动清空姓名项):

这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_30455841/article/details/78895650