js封装表单,信息框

前言

  • 项目当中经常使用到弹出表单,需要弹出表单的页面都要写一些DOM,或者引用第三方UI来满足需求。拿来的固然很香,但是要提升自己总要去不断的学习和总结。

实现思路

用JS去创建DOM,哪里需要用到这个表单,直接使用方法即可,使用完之后记得销毁DOM。
动态的值为:form表单的 ID,ACTION 每个input 的 NAME TYPE 等 提交之后的回调函数
确定完思路之后直接上代码

具体实现

1.弹框咱们都需要一个遮罩层和标题和表单内容
2.设置DOM的属性
3.设置动态的文本
4.绑定关闭事件和提交事件

// 创建元素
    var publicMask = document.createElement('div');             
    var formCon = document.createElement('div');
    var formConTop = document.createElement('div');
    var formConBot = document.createElement('div');
    var formBox = document.createElement('form');
//设置属性
    publicMask.id = "publicMask";
    formCon.id = "formCon";
    formConTop.className = "formConTop";
    formConBot.className = "formConBot";
//设置动态的文本
    formConTop.innerHTML='<p class="title">'+conList.biaoti+'</p><a class="close"><i class="fa fa-close"></i></a>';
                                                            
    var FromCon = '<form action='+conList.formAction+' id='+conList.formId+ ' method="post">';
    var htmlCon = '';
    for (var i=0;i<conList.data.inputList.length;i++){ 
        htmlCon+='<div class="formConBotC"><span>'+conList.data.inputList[i].wenzi+'</span><input name='+conList.data.inputList[i].name+' value="" /></div>';                   
    }
//把创建的DOM添加到body
    formConBot.innerHTML=FromCon+htmlCon+'<a class="subFormFB">提交</a>';
    formBox.append(formConBot);
    formCon.append(formConTop);
    formCon.append(formBox);
    document.body.append(formCon);
    document.body.append(publicMask);
// 事件
    // 关闭FORM弹框和蒙版          
    document.getElementsByClassName("close")[0].addEventListener('click',function(){
        document.body.removeChild(document.querySelector('#publicMask'));
        document.body.removeChild(document.querySelector('#formCon'));
    });
    //点击提交方法
    document.getElementsByClassName("subFormFB")[0].addEventListener('click',function(){                    
        // 如果回调函数存在且类型是function
        if ( typeof cb =='function' ){
            if(cb()==true){
                document.body.removeChild(document.querySelector('#publicMask'));
                document.body.removeChild(document.querySelector('#formCon'));
            }                                           
        }
    });

完整代码和样式

样式

<style>
            #publicMask{background-color:rgba(0,0,0,0.5);position:fixed;left:0;top:0; bottom: 0;right: 0;z-index:998;}
            #formCon{position: fixed;left: 50%;top: 50%;-moz-transform: translate(-50%,-50%);-webkit-transform: translate(-50%,-50%); -o-transform: translate(-50%,-50%); transform: translate(-50%,-50%); width: 410px;min-height: 200px;background-color: #fff;border-radius: 10px; z-index:999;}
            #formCon .formConTop{height: 50px;line-height: 50px;border-bottom: 1px solid #ece8e8;position: relative;}
            #formCon .formConTop .title{font-size: 16px;font-weight: bold;font-size: 16px;font-weight: bold;text-align: left;padding-left: 15px;}
            #formCon .formConTop a{height: 100%;width: 50px;position: absolute;right: 0;top:0;text-align: center;}
            #formCon .formConTop i{font-size: 25px;color: #f85e5e;}
            #formCon .formConTop i::before {content: "\2716";}
            #formCon .formConBot{width: 80%;margin: 0 auto;padding: 20px 0 30px;}
            #formCon .formConBot .formConBotC{height: 50px;line-height: 50px;margin-bottom: 20px;}
            #formCon .formConBot .formConBotC span{display: inline-block;width: 80px;font-size: 15px;text-align: justify;text-align-last: justify;}
            #formCon .formConBot .formConBotC input{width: 240px;border: 1px solid #989898; height: 40px;border-radius: 5px;padding: 0 10px;font-size: 15px;}
            #formCon .subFormFB{width: 100px;height: 30px;border-radius: 5px;display: block;margin: 0 auto;background: #690000;color: #fff;font-size: 15px;text-align: center;line-height: 30px;}
</style>

代码

注:conList参数在使用的时候有详细介绍

/**
 * 
 * 弹框form表单封装 2020.05.26
 * 
 * conList 数据
 * 
 * cb 回调函数,点击提交处理业务
 * 
 * **/
function formbiaodan(conList,cb) {              
    // 创建元素
    var publicMask = document.createElement('div');             
    var formCon = document.createElement('div');
    var formConTop = document.createElement('div');
    var formConBot = document.createElement('div');
    var formBox = document.createElement('form');
    
    //设置属性
    publicMask.id = "publicMask";
    formCon.id = "formCon";
    formConTop.className = "formConTop";
    formConBot.className = "formConBot";
    
    //设置动态的文本
    formConTop.innerHTML='<p class="title">'+conList.biaoti+'</p><a class="close"><i class="fa fa-close"></i></a>';
                                                            
    var FromCon = '<form action='+conList.formAction+' id='+conList.formId+ ' method="post">';
    var htmlCon = '';
    for (var i=0;i<conList.data.inputList.length;i++){ 
        htmlCon+='<div class="formConBotC"><span>'+conList.data.inputList[i].wenzi+'</span><input name='+conList.data.inputList[i].name+' value="" /></div>';                   
    }
    
    //把创建的DOM添加到body
    formConBot.innerHTML=FromCon+htmlCon+'<a class="subFormFB">提交</a>';
    formBox.append(formConBot);
    formCon.append(formConTop);
    formCon.append(formBox);
    document.body.append(formCon);
    document.body.append(publicMask);
    
    // 事件
    // 关闭FORM弹框和蒙版          
    document.getElementsByClassName("close")[0].addEventListener('click',function(){
        //用户点击关闭,清除弹框DOM
        document.body.removeChild(document.querySelector('#publicMask'));
        document.body.removeChild(document.querySelector('#formCon'));
    });
    //点击提交方法
    document.getElementsByClassName("subFormFB")[0].addEventListener('click',function(){                    
        // 如果回调函数存在且类型是function
        if ( typeof cb =='function' ){
            if(cb()==true){
                //处理完业务逻辑之后如果返回true,,清除弹框DOM
                document.body.removeChild(document.querySelector('#publicMask'));
                document.body.removeChild(document.querySelector('#formCon'));
            }                                           
        }
    });
}

页面使用方法

//根据设置动态文本来自定义当前页面所需要的数据
var conListshuju = {
    "biaoti": "输入信息",
    "formAction": "111",
    "formId": "111",
    "data": {
        "inputList": [
            {
                "type" : "type",
                "name" : "name",
                "wenzi": "姓名:"
            },
            {
                "type" : "type",
                "name" : "name",
                "wenzi": "手机号:"
            }
        ]
    }
}
//页面触发弹框调用方法
//调用方法,传入自定义的值              
formbiaodan (conListshuju,function(){
    //cb
    //当用户点击提交之后可以写业务逻辑
    return true;    
}); 

信息框

//msg 提示信息 t 几秒消失默认3000ms
function pubTishi(msg,t){
    if(t==null || t==undefined || t==''){
        t=300000000000000000000;
    }
    var div = document.createElement('div');
    div.id="pubTishi"
    div.style.cssText="position: fixed;left: 50%;top: 50%;-moz-transform: translate(-50%,-50%);-webkit-transform: translate(-50%,-50%); -o-transform:translate(-50%,-50%); transform: translate(-50%,-50%);background: rgba(0,0,0,0.8);color: #fff;color: rgb(255, 255, 255);padding: 10px 40px;border-radius: 10px;"
    msg='<span>msg</span>';
    div.innerHTML=msg;
    document.body.append(div);
    setTimeout(function(){
        document.body.removeChild(document.querySelector('#pubTishi'));
    }, t )
}
//使用直接调用此方法就行
 pubTishi('提交成功')

结语

有什么不足的地方,欢迎大家留言指正,哈哈。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。