关闭

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

标签: layer
1340人阅读 评论(0) 收藏 举报
分类:

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

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

执行函数:

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

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:['手机','密码','用户名','性别','邮箱','地区','个性签名','头像']
        }
    });

使用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>

效果如下:

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

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

还原按钮,即刷新页面:

$("#restore").click(function(){
            window.location.reload();
        })

保存按钮:

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

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

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

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

将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+"页";
    });
}
var userContent
function 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);
        }
    }); 
}
1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    文章分类
    最新评论