我只是写了一些代码,我遇到了这样的问题:
alertify.dialog("confirm").set(
{
'labels':
{
ok: 'Personal',
cancel: 'Share'
},
'message': 'Select target:',
'onok': function()
{
alertify.confirm($("#dir_select_user").get(0), function()
{
var i = $("#dir_select_user .dir_selector").val();
t.find(".move_des").val(i);
t.find(".move_verify").val("1");
t.submit();
}).set('labels',
{
ok: alertify.defaults.glossary.ok,
cancel: alertify.defaults.glossary.cancel
});
},
'oncancel': function()
{
alertify.confirm($("#dir_select_share").get(0), function()
{
var i = $("#dir_select_share .dir_selector").val();
t.find(".move_des").val(i);
t.find(".move_verify").val("1");
t.submit();
}).set('labels',
{
ok: alertify.defaults.glossary.ok,
cancel: alertify.defaults.glossary.cancel
});
}
}) }).show();
我使用http://alertifyjs.com中的alertifyjs
库(而不是http://fabien-d.github.io/alertify.js/)。
如果您尝试使用此代码,则在选择personal
或share
后,您会发现'onok'和'oncancel'对话框很快消失。
这里有什么问题?我该如何解决?
答案 0 :(得分:1)
问题的根源在于您正在尝试在关闭时再次显示相同的对话框。默认的AlertifyJS对话框都是单例(一直是一个实例)。
你有2个解决方案:
延迟显示第二次确认,直到第一次确认实际关闭。
alertify.confirm("confirm ? ",
function onOk() {
//delay showing the confirm again
//till the first confirm is actually closed.
setTimeout(function () {
alertify.confirm("confirm another time ?");
}, 100);
},
function onCancel() {
//no delay, this will fail to show!
alertify.confirm("this will not be shown!");
}
);
创建您自己的瞬态(多实例)确认,只需继承现有的。
// transient (multi-instance)
alertify.dialog('myConfirm', function factory(){ return {};},true,'confirm');
alertify.myConfirm("confirm ? ", function(){
alertify.myConfirm("confirm another time ?");
});
注意:请注意这一点,因为每次调用瞬态对话框都会创建一个新实例,您可以保存对已启动实例的引用并重新使用它们!
请参阅演示here。