1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Fechar tela modal jquery-ui com javascript. Código não está funcionando.

Tenho uma tela pai. Essa tela chama outra tela de filtro que está dentro de um IFrame e esse IFrame roda dentro de um Modal Jquery-UI. Fiz umas alterações para atender ao requisito aui. A página é feita em ASP. Bem, o que passa é que a função javascript, após executar suas atribuições, não fecha o Modal, voltando para a página chamadora(pai) e claro, preenchendo os devidos campos com os valores que vêm da tela de pesquisa(Modal). Abaixo a função javascript e a jquery que cria o Modal, nessa ordem.

function selecionar(num_contrato, cod_ts_contrato, nome_entidade){
    <%if trim(strAction) = "" then %>
        //ABRIU POPUP

        var txt_chamada = '';
        if (window.dialogArguments) {
            txt_chamada = "window.dialogArguments";
        } else if (window.parent.opener) {
            txt_chamada = "window.parent.opener";
        } else if (window.parent.frameElement) {
            if (window.parent.frameElement.ownerDocument.defaultView) {
                txt_chamada = "window.parent.frameElement.ownerDocument.defaultView";
            } else {
                txt_chamada = "window.parent.frameElement.ownerDocument.parentWindow";
            }
        }

      try{

           //COD_TS_CONTRATO

            var janela = null;
            if (window.dialogArguments) {
                janela = window.dialogArguments;
            } else if (window.parent.opener) {
                janela = window.parent.opener;
            } else if (window.parent.frameElement) {
                var documento = window.parent.frameElement.ownerDocument
                var janela = documento.defaultView || documento.parentWindow;
            }

            if (janela) {
                var txt_nome_campo_cod_ts = "<%= trim(txt_nome_campo_cod_ts) %>" || "cod_ts_contrato";
                var txt_nome_campo_cod = "<%= trim(txt_nome_campo_cod) %>" || "num_contrato";

                var ocod_ts_contrato = janela.document.form01[txt_nome_campo_cod_ts];
                var onum_contrato = janela.document.form01[txt_nome_campo_cod];
            }


//           //NOME_CONTRATO
      }catch(e){

           //COD_TS_CONTRATO
         <%if trim(txt_nome_campo_cod_ts)<>"" then %>
            var ocod_ts_contrato = eval(txt_chamada + ".<%Response.write txt_nome_campo_cod_ts%>");
         <%else%>
            var ocod_ts_contrato = eval(txt_chamada + ".cod_ts_contrato");
         <%end if %>

           if (ocod_ts_contrato != null )
               ocod_ts_contrato.value = cod_ts_contrato;

           //NUM_CONTRATO
           <%if trim(txt_nome_campo_cod)<>"" then%>
               var onum_contrato = eval(txt_chamada + ".<%Response.write txt_nome_campo_cod%>");
           <%else%>
               var onum_contrato = eval(txt_chamada + ".num_contrato");
           <%end if %>

           if (onum_contrato != null )
               onum_contrato.value = num_contrato;

           //NOME_CONTRATO
           <%if trim(txt_nome_campo_desc)<>"" then%>
               var onome_entidade = eval(txt_chamada + ".<%Response.write txt_nome_campo_desc%>");
           <%else%>
               var onome_entidade = eval(txt_chamada + ".nome_contrato");
           <%end if%>

           if (onome_entidade != null )
               onome_entidade.value = nome_entidade;

           <%if trim(funcao_executar) <> "" then%>
               /*try{
                   var aux = eval(txt_chamada+".<%Response.write funcao_executar%>");
               }catch(e){
                   window.returnValue = 'window.<%Response.write funcao_executar%>';            
               }*/
               var opener_document = oMyObject.ownerDocument;
               var opener_window = opener_document.defaultView || opener_document.parentWindow;

                  try {
                     eval("opener_window." + "<%Response.write funcao_executar%>");
                  } catch (e) {
                     window.returnValue = "window." + "<%Response.write funcao_executar%>";
                  }

           <%end if%>

         <%if ucase(indsubmit) = "TRUE" then%>
            eval(txt_chamada + ".submit()");
         <%else %>
            //Somente joga o Focus se o campo existir, e estiver desabilitado
            if (onum_contrato != null && onum_contrato.disabled==false && onum_contrato.enabled==true)
               onum_contrato.focus();
         <%end if%>
      }
      parent.self.close();
      $("#dialog1", janela).dialog("close");

    <%else %>
        //ABRIU NORMAL ENTAO DAR SUBMIT
        document.form01.cod_ts_contrato.value    = cod_ts_contrato;
        document.form01.num_contrato.value        = num_contrato;
        document.form01.action = '<%Response.write strAction & "?PT=" & Request("PT")%>';
        document.form01.submit();
    <%end if %>
}

Alterei a minha função Javascript para essa nova:

function selecionar(num_contrato, cod_ts_contrato, nome_entidade){
<%if trim(strAction) = "" then %>
    //ABRIU POPUP
    var janela = null;
    var isIFrame = false;
    var isPopUp = false;
    if (window.dialogArguments) {
        isPopUp = true;
        janela = window.dialogArguments;
    } else if (window.parent.opener) {
        isPopUp = true;
        janela = window.parent.opener;
    } else if (window.parent.frameElement) {
        isIFrame = true;
        var documento = window.parent.frameElement.ownerDocument
        var janela = documento.defaultView || documento.parentWindow;
    }

    if (janela) {
        var form01 = janela.document.form01 || janela;
        var cod_ts_contrato_id = "<%= trim(txt_nome_campo_cod_ts) %>" || "cod_ts_contrato";
        var num_contrato_id = "<%= trim(txt_nome_campo_cod) %>" || "num_contrato";
        var nome_contrato_id = "<%= trim(txt_nome_campo_desc) %>" || "nome_contrato";
        var funcao_executar_id = "<%= trim(funcao_executar) %>";

        var ocod_ts_contrato = form01[cod_ts_contrato_id];
        var onum_contrato = form01[num_contrato_id];
        var onome_entidade = form01[nome_contrato_id];
        var ofuncao_executar = funcao_executar_id ? janela[funcao_executar_id] : null;

        if (ocod_ts_contrato) ocod_ts_contrato.value = cod_ts_contrato;
        if (onum_contrato) onum_contrato.value = cod_ts_contrato;
        if (onome_entidade ) onome_entidade .value = nome_entidade;
        if (typeof ofuncao_executar === 'function') ofuncao_executar();

        if (onum_contrato != null && onum_contrato.disabled==false && onum_contrato.enabled==true)
            onum_contrato.focus();
    }

    if (isIFrame) {
        var dialog = $(janela.document.getElementById("dialog"));
        dialog.dialog("close");
    } 

    if (isPopUp) {
        parent.self.close();
    }

    form01.submit();

<%else %>
    //ABRIU NORMAL ENTAO DAR SUBMIT
    document.form01.cod_ts_contrato.value = cod_ts_contrato;
    document.form01.num_contrato.value = num_contrato;
    document.form01.action = '<%Response.write strAction & "?PT=" & Request("PT")%>';
    document.form01.submit();
<%end if %>
}

Essa minha função está quase pronta, exceto no seguinte. Ela fecha o Modal, preenche os campos da página chamadora(pai), mas tem um problema. Como há um submit na função .js, os campos na página pai são preenchidos e logo em seguida apagados, por conta do submit. Estou tendo dificuldade para resolver isso. Essa é a linha do submit:

form01.submit();

Como eu não possuo reputação para responder e consequetemente fechar o post, edito esse com a resposta que resolveu meu problema.

1) Retirei o submit e coloquei esse código no lugar:

var indsubmit = "<%= lcase(indsubmit) %>" === "true";
if (indsubmit) {
            form01.submit();
        } else if (onum_contrato != null && onum_contrato.disabled==false && onum_contrato.enabled==true) {
            onum_contrato.focus();
        }

2) Coloquei o código de fechamento do Modal, não na página onde está a função js, mas no form chamador(pai) e no form chamado a chamada a função de fechamento:

var fecharModal = function () {
        var dialog = $(document.getElementById("dialog"));
        dialog.dialog("close");
    }

Dessa forma resolvi.

  • Como eu fecho meu post? O site é meio incompleto, não dá opção para fechar. Posso até concordar em não me dá condição de responder, mas não conseguir fechar é no mínimo hilário. Pois deve-se pensar que o mesmo usuário que posta, ele mesmo pode conseguir a resposta. Fica aqui minha sugestão de melhorias.

    pnet   10 de ago de 2015
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags javascript jquery ou faça a sua própria pergunta.