Диалог оповещения исчез до подтверждения
Я просто писал код и столкнулся с такой проблемой:
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();
Я использую alertifyjs
библиотека от http://alertifyjs.com/ (не от http://fabien-d.github.io/alertify.js/).
Если вы попробуете этот код, вы обнаружите, что диалоги "onok" и "oncancel" быстро исчезают после выбора personal
или же share
,
В чем здесь проблема? Как я могу решить это?
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 ?"); });
Примечание: будьте осторожны с этим, так как каждый вызов переходного диалога будет создавать новый экземпляр, вы можете сохранить ссылки на запущенные экземпляры и использовать их повторно!
Смотрите демо здесь.