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('提交成功')

结语

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353