2012-06-28 5 views
4

Я использую jquery-ui dialog box. Моя проблема заключается в том, чтобы щелкнуть по кнопке x, чтобы закрыть диалоговое окно, мне также нужно выполнить функцию cancel().JQUERY-ui dialog x button function

Как я могу это сделать?

var content = 
{ 
    autoOpen : false, 
    modal  : true, 
    width  : 350, 
    minHeight : 50, 
    height  : 350, 
    position : "center", 
    resizable : false, 
    draggable : false, 
    close  : function() {$(".privacy_modal").prop("checked", false);}, 
    buttons: 
    { 
     "Cancel": function cancel() 
     { 
      $(".privacy_modal").prop("checked", false); $(this).dialog("close"); 
     }, 
     "Accept": function accept() 
     { 
      $(".privacy_modal").prop("checked", true); $(this).dialog("close"); 
     } 
    } 
}; 

TEST

ПРИМЕЧАНИЕ: Использование близко не решает мою проблему, поскольку он переопределяет функцию, когда я нажал на кнопку принять

+0

хия, вир человеку, вы имеете в виду, когда пользователь нажимает 'x' вы хотите функцию отмены будет называться? –

+0

функция cancel() {alert ("test");}, – newbie

+0

Прохладный, да, см. Мое сообщение ниже с помощью Demo, надеюсь, что это поможет 'beforeClose' является очень хорошим APi для этого использования, которое может пригодиться,':) ' –

ответ

7

Вы могли бы использовать переменную третьей стороной (bAccepts, который является ложным по умолчанию) и стороннего метода.

Когда пользователь принимает:

  • Набор bAccepts к Истинной

Когда пользователь аннулирует:

  • Набор bAccepts к ложному

Когда OnClose обжигают, вызов метод doClose(), который выполняет следующие действия:

  • если bAccepts это правда => принимать
  • еще => отменить

Вот некоторые ООН проверенные псевдо-код. См. working code.

var bAccepts = false; 
var content = { 
        autoOpen : false, 
        modal  : true, 
        width  : 350, 
        minHeight : 50, 
        height  : 350, 
        position : "center", 
        resizable : false, 
        draggable : false, 
        close  : function() { if (bAccepts) {...} else {...} }, 
        buttons: { 
         "Cancel": function cancel() { bAccepts = false; $(this).dialog("close");}, 
         "Accept": function accept() { bAccepts = true; $(this).dialog("close");} 
      } 
}; 
+2

Hiya bruv, просто идея, которую мы можем использовать 'beforeClose', как показано ниже: http://docs.jquery.com/UI/Dialog#event-beforeClose, которой может быть достаточно. cheerios ':)' –

+0

это не работает ... – newbie

+0

@newbie Я обновил ответ с рабочим кодом. См. Рабочую демонстрацию здесь: http://jsfiddle.net/6deP4/ – jonjbar

3

Работа демоhttp://jsfiddle.net/Ea6Hm/1/

Вы можете использовать: http://docs.jquery.com/UI/Dialog#event-beforeClose

с помощью beforeClose вы можете вызвать любую функцию, которую нужно вызвать перед диалоговым окном закрытия.

Надеется, что это помогает,

кода

$(document).ready(function() { 
    $('#theLink').click(function() { 
     $("#forgot-dialog").dialog("open"); 
    }); 

    $("#forgot-dialog").dialog({ 
     modal: true, 
     autoOpen: false, 
     height: 255, 
     width: 300, 
     beforeClose: function() { 
      alert("Do whatever before Close"); 
     }, 
     buttons: { 
      "Retrieve": function() { 
       document.forms["forgotform"].submit(); 
      }, 
      Cancel: function() { 
       $(this).dialog("close"); 
      } 
     }, 
    }); 


});​ 
+0

Если пользователь хочет остаться на текущей странице, это не сработает: вы не сможете закрыть диалоговое окно без запуска события beforeClose , – jonjbar

+0

Hiya @JohnRiche Я считаю, что это сработает, потому что 'beforeClose' =' Это событие срабатывает, когда диалог пытается закрыть. 'Поэтому beforeClose event будет запускать любое funtio s /, которое он вызывает, anyhoo OP может иметь возможность проливать больше света на этот контекст, но демонстрация должна быть ясной, Cheers for comment, –

+0

Да, beforeClose и close будут вызываться, когда диалог закрыт, но OP хотел, чтобы такое же действие выполнялось, когда нажата кнопка «Отмена», и когда нажата кнопка закрытия X: это может быть достигнуто с помощью переменной третьей стороны, см. мой ответ. – jonjbar

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