layui弹出层里使用TinyMCE富文本编辑器,并且回显数据案例

使用前先看下TinyMCE中文文档:http://tinymce.ax-z.cn/quick-start.php

先看下我要实现的功能

点击添加,弹出一个富文本编辑器,这个弹框有layer和TinyMCE组成

更新:回显内容

弹出层的页面的单独来一个,因为用的是iFrame

1.添加或者更新的页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="/resources/layui/css/layui.css">
    <link rel="stylesheet" href="/resources/css/public.css"/>
    <script type="text/javascript" src="/resources/layui/layui.js"></script>
    <script src="/resources/tinymce/tinymce.min.js"></script>
</head>
<body>
<div style="padding: 10px">
    <form method="post" id="formData" lay-filter="formData">
        <div class="layui-form-item">
            <label class="layui-form-label">公告标题</label>
            <div class="layui-input-block">
                <input type="hidden" name="id">
                <input type="text" name="title" lay-verify="required" autocomplete="off" placeholder="请输入标题"
                       class="layui-input"></div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label">公告内容</label>
            <div class="layui-input-block">
                <textarea name="content" id="addOrUpdateText"></textarea>
            </div>
        </div>
        <div class="layui-form-item">
            <div class="layui-input-block" style="text-align: center;">
                <button type="button" class="layui-btn" lay-submit lay-filter="doSubmit"><span
                        class="layui-icon layui-icon-add-1"></span>提交
                </button>
                <button type="reset" class="layui-btn layui-btn-warm"><span
                        class="layui-icon layui-icon-refresh-1"></span>重置
                </button>
            </div>
        </div>
    </form>
</div>

<script type="text/javascript">

    tinymce.init({
        selector: '#addOrUpdateText',
        language: "zh_CN"
    });

    /**
     * 获取url参数,回显内容,更新操作专用
     * @param name
     * @returns {string|null}
     */
    function getQueryString(name) {
        var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
        var r = window.location.search.substr(1).match(reg);
        if (r != null) {
            return decodeURI(r[2]);
        }
        return null;
    }

    layui.use(['jquery', 'form'], function () {
        var form = layui.form;
        var $ = layui.jquery;
        tinyId = 'addOrUpdateText';
        //通过url参数赋值给表单
        $('[name="id"]').val(getQueryString("id"));
        $('[name="title"]').val(getQueryString("title"));
        $('[name="content"]').val(getQueryString("content"));
        let content = getQueryString('content');
        if (content != null) {
            tinyMCE.editors[tinyId].setContent();
        }

        form.on('submit(doSubmit)', function (data) {

            //在提交数据前,同步内容到textarea,这样下面才能拿得到数据
            tinyMCE.editors[tinyId].save();
            $.post('/notice/addNotice', $('#formData').serialize(), function (res) {
                if (res.code == 200) {
                    //在父窗口里得到当前iframe层的索引
                    var index = parent.layer.getFrameIndex(window.name);
                    //再执行关闭
                    parent.layer.close(index);
                    //重载父级页面的表格
                    parent.layui.table.reload('noticeTable');
                }
                layer.msg(res.msg);
            });
            return false; //阻止表单跳转。如果需要表单跳转,去掉这段即可。
        });

    });
</script>
</body>
</html>

2.点击添加或更新按钮所在的页面(父页面)调用TinyMC的页面,摘取部分主要代码

        function add() {
            layer.open({
                title: "添加公告",
                //一定是要ifream类型,不然富文本编辑器编辑不了内容
                type: 2,
                maxmin: true,
                area: ['800px', '400px'],
                content: '/sys/toAddOrUpdate',
                btnAlign: 'c'
            });
        }

        function update(data) {

            layer.open({
                type: 2,
                maxmin: true,
                area: ['800px', '400px'],
                //打开的页面,通过url参数方式,把需要回显的数据带过去,记得编码,不然乱码
                content: '/sys/toAddOrUpdate?'+parseParams(data),

                //这个方法当你在层创建完毕时即执行一些语句
                // success: function (layero, index) {
                //     var body = layer.getChildFrame('body', index);
                //本来这样赋值可以让弹出层的表单成功赋值,就是回显,
                //但是我在弹出层页面取不到赋的值,所以就暂时不用,群友可以用,有空再试一试,
                //     body.find('[name="id"]').val(data.id);
                //     body.find('[name="title"]').val(data.title);
                //     body.find('[name="content"]').text(data.content);
                // }
            });
        }

        function parseParams(data) {
            try {
                var tempArr = [];
                for (var i in data) {
                    var key = encodeURI(i);
                    var value = encodeURI(data[i]);
                    tempArr.push(key + '=' + value);
                }
                var urlParamsStr = tempArr.join('&');
                return urlParamsStr;
            } catch (err) {
                return '';
            }
        }
    });

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值