mirror of https://github.com/layui/layui
feat(layer): 新增 beforeEnd 回调 (#1968)
* feat(layer): 新增 beforeEnd 回调 * docs(layer): 更新 beforeEnd 文档 * update * update * refactor: 简化代码 * docs(layer): 更新 beforeEnd 文档 * update * updatepull/1986/head
parent
c32e65b944
commit
d81ada23b1
|
@ -733,6 +733,41 @@ layer.open({
|
|||
<tr>
|
||||
<td>
|
||||
|
||||
[beforeEnd](#options.beforeEnd) <sup>2.9.11+</sup>
|
||||
|
||||
</td>
|
||||
<td colspan="3">
|
||||
|
||||
<div id="options.beforeEnd" lay-pid="options" class="ws-anchor">
|
||||
弹层被关闭前的回调函数。如果返回 false 或者 Promise.reject,将会取消关闭操作。
|
||||
</div>
|
||||
|
||||
```
|
||||
layer.open({
|
||||
content: '<div style="padding: 32px;"><input id="id"/></div>',
|
||||
/** @type {(layero: JQuery, index: number) => boolean | JQueryDeferred<boolean> | Promise<boolean>} */
|
||||
beforeEnd: function(layero, index){
|
||||
return $.Deferred(function(defer){
|
||||
var el = layero.find('#id');
|
||||
var val = el.val().trim();
|
||||
if(val){
|
||||
layer.confirm('关闭后您填写的内容将不会得到保存,确定关闭吗?', function (i) {
|
||||
layer.close(i);
|
||||
defer.resolve(true)
|
||||
});
|
||||
}else{
|
||||
defer.resolve(true)
|
||||
}
|
||||
}).promise();
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
[end](#options.end)
|
||||
|
||||
</td>
|
||||
|
|
|
@ -30,6 +30,7 @@ var ready = {
|
|||
removeFocus: true
|
||||
},
|
||||
end: {},
|
||||
beforeEnd: {},
|
||||
events: {resize: {}},
|
||||
minStackIndex: 0,
|
||||
minStackArr: [],
|
||||
|
@ -925,6 +926,7 @@ Class.pt.callback = function(){
|
|||
});
|
||||
|
||||
config.end && (ready.end[that.index] = config.end);
|
||||
config.beforeEnd && (ready.beforeEnd[that.index] = config.beforeEnd);
|
||||
};
|
||||
|
||||
// for ie6 恢复 select
|
||||
|
@ -1219,6 +1221,7 @@ layer.close = function(index, callback){
|
|||
|
||||
if(!layero[0]) return;
|
||||
|
||||
var executor = function(){
|
||||
// 关闭动画
|
||||
var closeAnim = ({
|
||||
slideDown: 'layer-anim-slide-down-out',
|
||||
|
@ -1301,6 +1304,34 @@ layer.close = function(index, callback){
|
|||
remove();
|
||||
}, 200);
|
||||
}
|
||||
}
|
||||
|
||||
if(!hideOnClose && typeof ready.beforeEnd[index] === 'function'){
|
||||
// 类似 Promise.resolve
|
||||
var promiseLikeResolve = function(value){
|
||||
var deferred = $.Deferred();
|
||||
|
||||
if(value && typeof value.then === 'function'){
|
||||
value.then(deferred.resolve, deferred.reject);
|
||||
}else{
|
||||
deferred.resolve(value);
|
||||
}
|
||||
return deferred.promise();
|
||||
}
|
||||
|
||||
promiseLikeResolve(ready.beforeEnd[index](layero, index))
|
||||
.then(function(result){
|
||||
if(result !== false){
|
||||
delete ready.beforeEnd[index];
|
||||
executor();
|
||||
}
|
||||
}, function(reason){
|
||||
reason !== undefined && window.console && window.console.error('layer error hint: ' + reason);
|
||||
});
|
||||
}else{
|
||||
delete ready.beforeEnd[index];
|
||||
executor();
|
||||
}
|
||||
};
|
||||
|
||||
// 关闭所有层
|
||||
|
|
Loading…
Reference in New Issue