使用layer弹窗,制作编辑User信息页面

来源:互联网 发布:淘宝达人赚钱不 编辑:程序博客网 时间:2024/06/07 18:47

用户信息展示页面为A页面,编辑页面为B页面。A是B的父页面 
首先在A页面添加按钮,点击触发函数,函数初始化layer弹窗 
‘编辑’按钮:

<button type="button" class="btn btn-primary btn-xs" id="edit{{item.id}}"                     onclick="editSingle('{{$index}}')">修改</button>
  • 1
  • 2

执行函数:

var userContent//作为全局变量,之后给B页面直接调用,后面会提到function editSingle(index){    userContent = vm.content[index]    layer.open({        type: 2,        title: '编辑',        area : ['800px' , '520px'],         scrollbar: false,//禁止浏览器滚动        content: 'bUser/editSingle'        }); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

B页面初始化时从A页面取值,用parent.xxx

var iframe = parent.layer.getFrameIndex(window.name); //获取窗口索引,这里的B页面所在窗口的索引值为1    var vm = new Vue({        el:'#editUser',        data:{            contents:parent.userContent,//从A页面取值            titles:['手机','密码','用户名','性别','邮箱','地区','个性签名','头像']        }    });
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

使用Vue动态生成html语句

<form class="form-horizontal" id="editUser" action="<%=basePath%>/BSMSys/bUser/save" method="post">    <div class="form-group" v-for="(key,value) in contents" >        <div v-if="$index==0">            <div hidden>                <input v-else type="text" class="form-control" id="{{key}}" name="{{key}}" placeholder="{{value}}" value="{{value}}">            </div>        </div>        <div v-if="$index!=0">            <label for="{{key}}" class="col-xs-2 control-label">{{titles[$index-1]}}</label>            <div class="col-xs-9" >                <div v-if="$index==4 || value=='MAN'" class="fixradio">                    <input type="radio" name="{{key}}" id="{{key}}" value="MAN"/><input type="radio" name="{{key}}" id="{{key}}" value="WOMEN"/></div>                <input v-else type="text" class="form-control" id="{{key}}" name="{{key}}" placeholder="{{value}}" value="{{value}}">            </div>        </div>    </div>    <div class="form-group">        <div class="col-xs-offset-5 col-xs-1">            <button class="btn btn-primary" id="save">保存</button>        </div>        <div class="col-xs-1">            <button class="btn btn-default" id="restore">还原</button>        </div>    </div></form>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

效果如下: 

由于其中’性别’是radio单选框,所以需要判断

//判断性别,并选中对应的radio        if(vm.contents.sex!=''){            if(vm.contents.sex=='MAN') $("#sex:eq(0)").click();            else $("#sex:eq(1)").click();        }
  • 1
  • 2
  • 3
  • 4
  • 5

还原按钮,即刷新页面:

$("#restore").click(function(){            window.location.reload();        })
  • 1
  • 2
  • 3

保存按钮:

$("#save").click(function(){            $("#editUser").submit();            parent.location.reload();            //parent.layer.close(iframe);//如果执行这一步,会导致submit无法提交到服务器,这里用刷新页面使弹窗关闭        })
  • 1
  • 2
  • 3
  • 4
  • 5

在后台将form数据保存进数据库即可

后续优化: 
将B页面form表单的submit提交改为ajax提交,

function save(){            $.ajax({            type:"post",            url:"<%=basePath%>/BSMSys/bUser/save",            data: $("#editUser").serialize(),//序列化表单数据            complete: function() {                parent.layer.close(iframe);//关闭弹窗            }        });    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
$('#save').on('click', function(){            save();        });
  • 1
  • 2
  • 3

将A页面的layer弹窗添加end函数回调,使弹窗关闭后刷新页面:

function jumpToPage(page){    $.get("<%=basePath%>/BSMSys/bUser/showUser?pageNum="+page, function(data) {         vm.content=data.content;//赋值给vue        currPage = data.number+1;        $('#pager').bootstrapPaginator("show",currPage );//初始化分页插件    });    $("#pageInputGroup").attr("class","input-group");    $("#pageInput").attr("placeholder",function(index,value){        $(this).val("");        return "第"+options.currentPage+"页,共"+options.totalPages+"页";    });}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
var userContentfunction editSingle(index){    userContent = vm.content[index]    layer.open({        type: 2,        title: '编辑',        area : ['800px' , '520px'],         scrollbar: false,//禁止浏览器滚动        content: '<%=basePath%>/BSMSys/bUser/editSingle',        end:function(){            jumpToPage(options.currentPage);        }    }); }
原创粉丝点击