美文网首页
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封装表单,信息框

    前言 项目当中经常使用到弹出表单,需要弹出表单的页面都要写一些DOM,或者引用第三方UI来满足需求。拿来的固然很香...

  • 基于原生JS封装的Modal对话框插件

    基于原生JS封装Modal对话框插件 原生JS封装Modal对话框插件,个人用来学习原理与思想,只有简单的基本框架...

  • 表单设计经验集锦

    一、表单结构 标签:告诉用户表单问题是什么; 输入框或者下拉框:供给用户填写或选择答案信息; 动作:用户提交表单,...

  • ant design vue-1.6.2---------for

    1.form表单的使用 标签 js使用 二,图片上传封装组件

  • HTML5之表单

    在网站中,表单是指收集用户的信息。 一,表单控件 1.文本框:单行文本框(Text input),密码框(Pass...

  • CSS(二)

    学习笔记(七):表单 表单就是收集用户信息的,就是让用户填写的、选择的。表单分为:文本框,密码框,单选按钮,复选框...

  • HTML 表单

    网页中的表单是用来向服务器提交信息的.例如:QQ截图20180911162305.jpg 表单项 文本框 密码框 ...

  • 表单(例婚恋网站)及控件

    作用:用来收集用户信息的。 表单框(表单域) 1.文本框 扩展:maxlength规定输入字段中的字符的最大长度 ...

  • HTML表单

    表单的作用: 把页面的表单的信息提交到服务器。 常见的input标签 text:单行文本框password:密码框...

  • JS实现智能测评系统,为传统电脑增添“智慧大脑”!

    实现思路 表单封装: 【1】由于采用JS封装提交所以,不需要form标签 【2】放置多个input标签,作为输入项...

网友评论

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

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