问题
页面中弹出layedit时只能第一次弹出,后面弹不出来,而且在父页面获取不到编辑完的值
解决:
1让页面模板加载完成后再去初始化layedit,从而保证layedit每次都能正常弹出
2初始化时记录当前编辑器的id,将其作为表单元素提交时传给父页面
3.父页面根据收到的编辑器id获取内容
代码
父页面代码
// 添加
function add() {
admin.popup({
title: '添加'
, area: ['550px', '550px']
, id: 'LAY-popup-content-add'
, success: function (layero, index) {
view(this.id).render('otherInfo/notice/form').done(function () {
form.render(null, 'layuiadmin-app-form-list');
//监听提交
form.on('submit(layuiadmin-app-form-submit)', function (data) {
var field = data.field; //获取提交的字段
field.content = layedit.getContent(field.index);//关键代码
admin.req({
url: layui.setter.api + 'm-notice'
, type: 'post'
, data: field
, done: function (result) {
layer.msg(result.msg);
layui.table.reload('LAY-app-content-list'); //重载表格
layer.close(index); //执行关闭
}
});
});
});
}
});
}
弹出页代码
关键代码
lay-done="init()" 加载完执行init 初始化layedit
init 中将当前layedit的索引值保存到隐藏表单中,提交时传给父页面,父页面可以根据index取出内容
<div class="layui-form" lay-filter="layuiadmin-app-form-list" id="layuiadmin-app-form-list"
style="padding: 20px 30px 0 0;">
<div class="layui-form-item">
<label class="layui-form-label" style=' width: 40px;' >内容</label>
<div class="layui-input-inline" style="float:left;width:80%;">
<script type="text/html" template lay-done="init()">
<textarea id='demo' type="text" name="content" placeholder="" autocomplete="off" class="layui-input" style='width:500px;height:245px;'>{{ d.params.content || '' }}</textarea>
</script>
</div>
</div>
<script type="text/html" template>
<input type="hidden" name="id" value="{{ d.params.id || '' }}">
</script>
<input type="hidden" name="index" id="index" value="1">
<div class="layui-form-item">
<label class="layui-form-label"></label>
<div class="layui-input-inline">
<input type="button" lay-submit lay-filter="layuiadmin-app-form-submit" value="确认" class="layui-btn">
</div>
</div>
</div>
<script>
layui.use(['layedit','form'], function () {
});
</script>
<script>
function init() {
layui.use(['layedit','form'], function () {
var $ = layui.$;
var layedit = layui.layedit;
var index = layedit.build('demo');
$("#index").val(index)
});
}
</script>