layui弹窗间的传值(layui弹出层传值)(窗口传值)[通俗易懂]

layui弹窗间的传值(layui弹出层传值)(窗口传值)[通俗易懂]主要有两部分1、从主窗口传值到弹出层2、从弹出层传值到主窗口1、从主窗口传值到弹出层首先时jschangefileone函数时按钮绑定事件,按钮点击后调用这个函数然后弹出弹出层,加载changefile.html界面然后success提前加载changefile的form数据(从主窗口传值到弹出层)//bootstraptable的修改,点击按钮的时候自动选中该行,因此可以获取到整行…

大家好,又见面了,我是你们的朋友全栈君。

主要有两部分
1、从主窗口传值到弹出层
2、从弹出层传值到主窗口
3、通过session互传
4、通过调用父窗口的函数从而获取到父窗口的值(相反也是可以的)

1、从主窗口传值到弹出层

首先时js
changefileone函数时按钮绑定事件,按钮点击后调用这个函数然后弹出弹出层,加载changefile.html界面
然后success提前加载changefile的form数据(从主窗口传值到弹出层)

//bootstraptable的修改,点击按钮的时候自动选中该行,因此可以获取到整行的值
function changefileone() { 
   
    var rowselect = $("#menuTable").bootstrapTable('getSelections');   //取得当前选定的selectItem对象,其中包括整行值
    console.log(rowselect);
    layer.open({ 
   
        title: "修改文件属性",
        type: 2,
        content: "changefile.html",
        area: ['50%', '70%'],
        skin: "layui-layer-molv",
        btn: ['确定', '关闭'],
        success: function (layero, index) { 
       //成功获得加载changefile.html时,预先加载,将值从父窗口传到 子窗口
             console.log(obj.data.editAble);
            let body = layer.getChildFrame('body', index);
            //console.log(rowselect[0].filename);
            body.find(".filename").val(rowselect[0].filename);   //通过class名进行获取数据
            body.find(".filepath").val(rowselect[0].path);//意思是将rowselect[0].path这个值传递到子窗口的class="filepath"这个的文本框中,(预先加载)
            //body.find(".menuid").val(rowselect[0].previousid);
            layui.form.render();
        },


        yes: function (index, layero) { 
            //按了弹出层的确定按钮时,这是将在父窗口中获取子窗口form标签里的所有值,并根据name名和值形成键值对json对象
            //console.log(layero);
            layer.alert('来到这里了'+index);
            let body = layer.getChildFrame("body", index);
            let data = { 
   };
            body.find("#changefileform").serializeArray().forEach(function (item) { 
       //获取弹出层写下的数据,input,下拉框啊,之类的表单元素(即changefileform下的所有数据)

                data[item.name] = item.value;   //根据表单元素的name属性来获取数据

            });
            data["fileid"] = rowselect[0].fileid;
            //if (data["previousid"] == "" || data["previousid"] == null)
            // data["previousid"] = rowselect[0].previousid;
            console.log(data);
            $.post('/api/dofile', data, function (result) { 
   
                if (result == "success") { 
   
                    layer.alert("修改文件属性成功");
                }

                setTimeout(function () { 
   
                    layer.close(index);
                    parent.location.reload();
                }, 600);
            });

            layer.close(index);
            resetSearch();
        }
    });
    
}

在这里插入图片描述
点击按钮后,提前加载在这里插入图片描述

然后是html界面,script里面是用来下拉框加载数据库数据的,可以删掉

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <script src="/Scripts/jquery/jquery.min.js" type="text/javascript"></script>
    <script src="/Scripts/layer/layer.js" type="text/javascript"></script>
    <script src="/Scripts/layui/layui.all.js" type="text/javascript"></script>
    <link rel="stylesheet" href="/Scripts/layui/css/layui.css" />
    <script type="text/javascript"> $(document).ready(function () { 
     var selectvalue = ""; //定义这个用来存放选择的value layui.use('form', function () { 
     var form = layui.form; $.get("/api/choosemenu", function (data) { 
     for (var j in data.rows) { 
     //alert(data.rows[j].Name); $("#menuname").append("<option value='" + data.rows[j].menuid + "'>" + data.rows[j].Name + "</option>"); } form.render(); form.on('select', function (data) { 
     //alert(data.value); //console.log(data.value); selectvalue = data.value; console.log(selectvalue); }); }) }) }) </script>
</head>
<body>
    <form class="layui-form" id="changefileform">
        <!-- 提示:如果你不想用form,你可以换成div等任何一个普通元素 -->
        <div class="layui-form-item">
            <label class="layui-form-label layui-bg-red layui-center">文件名</label>
            <div class="layui-input-block">
                <input type="text" name="filename" placeholder="请输入" autocomplete="off" class="layui-input filename">
            </div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label layui-bg-red layui-center">文件路径</label>
            <div class="layui-input-block">
                <input type="text" name="filepath" placeholder="请输入" autocomplete="off" class="layui-input filepath">
            </div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label layui-bg-green layui-center">父目录</label>
            <div class="layui-input-block">
                <select name="previousid" id="menuname" lay-search>
                    <option value="" style="width:50px" class="menuid">请选择父目录</option>
                </select>

            </div>
        </div>
    </form>

</body>

</html>

2、然后再这个弹出层填写数据,按了确定后就开始加载这个js啦,这个获取数据是通过name属性来获取的,上面 那个的话是通过class名称来获取的
在这里插入图片描述
然后controller获取从js传来的数据的话,看我另外的博客
下拉框动态获取数据库数据
下拉框可以搜索
看我其他博客

3、通过session传值

设置session

sessionStorage.setItem('roleid', 'hello');

取session

var ss=sessionStorage.getItem('roleid');

删除session中保存指定的值

sessionStorage.removeItem('roleid');

删除全部

sessionStorage.clear();

4、通过调用父窗口的函数从而获取到父窗口的值, 这个适合获取少量值, 父窗口的js:

(1)(这个是获取bootstraptable的选定值)menuTable是表格的id,这样返回的值是jSON值来的

function getrowselect() { 
   
    return $.map($('#menuTable').bootstrapTable('getSelections'), function (row) { 
   
        return row//返回数据行
    });
}

(2)如果是普通的text文本框(父窗口的js)

function getrowselect() { 
   
    return $.map($('#text').val(), function (row) { 
   
        return row//返回数据行
    });
}

(3)也可以直接在子窗口的js

window.parent.getElementById("text").val();

如果是(1)(2)种的话子窗口js这样调用(这个是接(1)(2)的啊别搞错了):

 var rowselect = window.parent.getrowselect();
 console.log(rowselect);//这里可以打印一下获取到值没有

5、假如是子窗口传值给父窗口

父窗口js:

function getrowselect(userdata) { 
   
    console.log(userdata);
    document.getElementById(userdata.inputid).value = userdata.uname;
    var dffff = "id" + userdata.inputid;
    document.getElementById(dffff).value=userdata.uid;
    return;
            }

子窗口:

//data="";
//data={"ss"="hello","gg"="world"}
window.parent.getrowselect(data);

6、假如子弹窗窗口想要比父窗口大的话,需要用到top.layer.open或者parent.layer.open
这时通过

var iframeWin = window[layero.find('iframe')[0]['name']]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/131259.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JAVA垃圾回收-可达性分析算法「建议收藏」

    在java中是通过引用来和对象进行关联的,也就是说如果要操作对象,必须通过引用来进行。那么很显然一个简单的办法就是通过引用计数来判断一个对象是否可以被回收。不失一般性,如果一个对象没有任何引用与之关联,则说明该对象基本不太可能在其他地方被使用到,那么这个对象就成为可被回收的对象了。这种方式成为引用计数法。这种方式的特点是实现简单,而且效率较高,但是它无法解决循环引用的问题,因此在Java中并没…

    2022年4月18日
  • android美化界面设计_android界面模板

    android美化界面设计_android界面模板前言:很多童鞋对美化很感兴趣,都想拥有一个完完全全属于自己风格的手机系统!对那些自定义全局背景,1%电量显示,透明下拉菜单。。。都很感冒!美化的重点跟难点就在于对”framework-res.apk”和”systemUI.apk”这两个文件的编译和反编译!这里说的编译和反编译是所有深度美化都必须要做的事,也就是说,所有的美化都是基于对apk的反编译后,才能进行的!而绝大多数修改”framework…

    2022年9月2日
  • IntelliJ IDEA中创建java项目

    IntelliJ IDEA中创建java项目IntelliJIDEA支持java、Android、Maven、Gradle、Kotlin等类型的项目,同时AndroidStudio就是在其基础上二次开发出来的,功能非常强大。本文以IntelliJIDEA2018.2.5版本为例介绍如何创建java项目。1.依次选择菜单:File->New->Project…,打开NewProject界面。2.在左侧的项目类型里选择:Java,点击Next按钮。3.在出现的界面中选中“Createprojectfromtempl

    2022年7月8日
  • java泛型详解

    java泛型详解1、什么是java泛型?泛型是JavaSE1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。2、为什么需要泛型?Java语言引入泛型的好处是安全简单。可以将运行时错误提前到编译时错误。在JavaSE1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现

    2022年6月28日
  • CodeForces 10D. LCIS 最长公共上升子序列模板题 + 打印路径

    CodeForces 10D. LCIS 最长公共上升子序列模板题 + 打印路径

    2022年1月30日
  • 学习率衰减之余弦退火(CosineAnnealing)

    学习率衰减之余弦退火(CosineAnnealing)1引言当我们使用梯度下降算法来优化目标函数的时候,当越来越接近Loss值的全局最小值时,学习率应该变得更小来使得模型尽可能接近这一点,而余弦退火(Cosineannealing)可以通过余弦函数来降低学习率。余弦函数中随着x的增加余弦值首先缓慢下降,然后加速下降,再次缓慢下降。这种下降模式能和学习率配合,以一种十分有效的计算方式来产生很好的效果。在论文StochasticGradientDescentwithWarmRestarts中介绍主要介绍了带重启的随机梯度下降算法(SGDR),其

    2022年5月1日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号