Pergunta

Eu estou usando o jquery-ui-dialog plugin

Estou procurando por forma a atualizar a página quando, em algumas circunstâncias, quando a caixa de diálogo é fechada.

Existe uma maneira de capturar um evento fechar a caixa de diálogo?

Eu sei que pode executar código quando o próximo botão é clicado, mas que não cobre o usuário fechar com o escape ou no x no canto superior direito.

Foi útil?

Solução

Eu encontrei-o!

Você pode pegar o evento close usando o seguinte código:

 $('div#popup_content').on('dialogclose', function(event) {
     alert('closed');
 });

Obviamente, eu posso substituir o alerta com o que eu preciso fazer.
Editar: Como Jquery de 1,7, o ligamento () tornou-se em ()

Outras dicas

Eu acredito que você também pode fazê-lo ao criar o diálogo (copiado de um projeto que eu fiz):

dialog = $('#dialog').dialog({
    modal: true,
    autoOpen: false,
    width: 700,
    height: 500,
    minWidth: 700,
    minHeight: 500,
    position: ["center", 200],
    close: CloseFunction,
    overlay: {
        opacity: 0.5,
        background: "black"
    }
});

Nota close: CloseFunction

$("#dialog").dialog({
autoOpen: false,
resizable: false,
width: 400,
height: 140,
modal: true, 
buttons: {
  "SUBMIT": function() { 
    $("form").submit();
  }, 
  "CANCEL": function() { 
    $(this).dialog("close");
  } 
},
**close: function() {
  alert('close');
}**
});
$( "#dialogueForm" ).dialog({
              autoOpen: false,
              height: "auto",
              width: "auto",
              modal: true,
                my: "center",
                at: "center",
                of: window,
              close : function(){
                  // functionality goes here
              }  
              });

propriedade "perto" de diálogo dá o evento perto para o mesmo.

U também pode tentar este

$("#dialog").dialog({
            autoOpen: false,
            resizable: true,
            height: 400,
            width: 150,
            position: 'center',
            title: 'Term Sheet',
            beforeClose: function(event, ui) { 
               console.log('Event Fire');
            },
            modal: true,
            buttons: {
                "Submit": function () {
                    $(this).dialog("close");
                },
                "Cancel": function () {
                    $(this).dialog("close");
                }
            }
        });

Isto é o que funcionou para mim ...

$('#dialog').live("dialogclose", function(){
   //code to run on dialog close
});

A partir de 1,7 jQuery, o .on () método é o método preferido para a fixação de manipuladores de eventos para um documento.

Porque ninguém realmente criado uma resposta com o uso .on() vez de bind() eu decidi criar um.

$('div#dialog').on('dialogclose', function(event) {
     //custom logic fired after dialog is closed.  
});

adicionar a opção 'fechar' como sob amostra e fazer o que quiser função inline

close: function(e){
    //do something
}

Se eu estou entendendo o tipo de janela que você está falando, não $(window).descarregar (a) (para a janela de diálogo) dar-lhe o gancho que você precisa?

(E se eu mal entendido, e você está falando sobre uma caixa de diálogo feita através de CSS em vez de uma janela de pop-up janela do navegador e, em seguida, todos as maneiras de fechar a janela são elementos que você pode registrar clique em mão para.)

Editar: Ah, agora eu vejo que você está falando sobre jquery-ui caixas de diálogo, que são feitas através de CSS.Você pode ligar o X que fecha a janela de registrar um manipulador de clique para o elemento com a classe interface do usuário-caixa de diálogo-título-fechar.

Mais útil, talvez, é que você pode dizer-lhe como descobrir isso rapidamente.Ao exibir a caixa de diálogo, basta abrir o FireBug e Inspecionar os elementos que podem fechar a janela.Você vai ver como eles são definidos e que lhe dá o que você precisa para registrar os manipuladores de cliques.

Assim diretamente para responder sua pergunta, eu acredito que a resposta seja "não" - não é não é um evento fechado você pode ligar, mas "sim" - você pode ligar todas as maneiras para fechar a caixa de diálogo com bastante facilidade e obter o que deseja.

Você pode tentar o seguinte código para capturar o evento de encerramento para qualquer item:. Página, diálogo etc

$("#dialog").live('pagehide', function(event, ui) {
      $(this).hide();
});
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top