2013-12-09 3 views
1

Когда я открываю всплывающее окно в своем приложении. И делаю некоторые изменения и закрывает его без сохранения. Он отображает сообщение с подтверждением, и всплывающие окна не закрываются.Всплывающее окно не ждет ответа на закрытие

var r = confirm("There are some unsaved changes, do you want to quit?"); 

И дальнейшее выполнение продолжается подтверждение пользователя, Yes or cancel.(Native jquery buttons). Моей потребности в том, чтобы иметь три кнопки, Yes ,No and Cancel. Я сделал это вот так.

var question = "There are some unsaved changes, do you want to quit?"; 
      confirmation(question).then(function (answer) { 
       // var ansbool = Boolean.parse(answer.toString()); 
       var r = answer.toString(); 
       alert(r); 
       if (r == "true") { 
        ..... 
        return true; 
       } 
       else { 
        ....     
        return false; 
       } 
      }); 

function confirmation(question) { 
    var defer = $.Deferred(); 
    $('<div></div>') 
     .html(question) 
     .dialog({ 
      autoOpen: true, 
      modal: true, 
      title: 'Confirmation', 
      buttons: { 
       "Yes": function() { 
        defer.resolve("true"); //this text 'true' can be anything. But for this usage, it should be true or false. 
        $(this).dialog("close"); 
       }, 
       "No": function() { 
        defer.resolve("false"); //this text 'false' can be anything. But for this usage, it should be true or false. 
        $(this).dialog("close"); 
       }, 
       "Cancel": function() { 
        $(this).dialog("close"); 
       } 
      } 
     }); 
    return defer.promise(); 
}; 

Он показывает мне сообщение, содержащее эти три buttons.But также закрывает основные всплывающие window.I хотят, когда пользователь нажимает на Yes ,No , то closes.After щелчка.

Заранее спасибо.

+0

Когда вы вызываете 'подтверждение'? – Halcyon

+0

@FritsvanCampen см. Вторую строку моего кода. подтверждение (вопрос). then (function (answer) {.. – EHS

+0

Это происходит, так как ваш диалог во втором фрагменте не является модальным. Если вы вызываете «модальный диалог» в обработчике событий onbeforeunload, закрытие страницы процесс не дождался выполнения модального кода, вместо этого он завершает страницу. – Teemu

ответ

0

Это происходит потому, что ваш запрос на подтверждение просто проваливается, он не ждет ответа. Единственный способ, которым я это знаю, - это установить действие внутри подтверждения:

UI.confirmDialog('Record will be removed...Continue?').done(function() { 
      //perform the desired function here 
      return false; 
     }).fail(function() { 
      return false; 
     }); 
+0

Можете ли вы изменить мой код. Потому что я не получаю и не смущаюсь в этом, что как я положу эти три кнопки в UI.ConfirmDialog. – EHS

+0

Оставьте вашу функцию подтверждения самостоятельно, а затем: подтверждение («Есть некоторые несохраненные изменения, вы хотите выйти?»). Done (function (answer) { if (answer === "true") {return true }; elseif (answer === "false") {return false}; }). Fail (function() {return false; }); Или что-то в этом роде, поиграйте с комбинацией, пока она не сработает. Главное - использовать атрибут «done». –

Смежные вопросы