美文网首页
js封装表单,信息框

js封装表单,信息框

作者: 番茄炒西红柿L | 来源:发表于2020-05-26 18:48 被阅读0次

    前言

    • 项目当中经常使用到弹出表单,需要弹出表单的页面都要写一些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('提交成功')
    

    结语

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

    相关文章

      网友评论

          本文标题:js封装表单,信息框

          本文链接:https://www.haomeiwen.com/subject/arvvahtx.html