Comunidad de diseño web y desarrollo en internet online

Jquey - Problema con Dialog y Load

Citar            
MensajeEscrito el 10 Ago 2011 03:57 pm
Hola!
Estoy haciendo un sistema en MVC3 con C# y le estoy agregando varias cosas con Jqeury. Una de las ideas que tuve es manejar todo un flujo de navegacion mediante Jquery Dialog. Al principio lo habia hecho cargando un Iframe en el Interior del Dialog, y funcionaba bien, pero (por alguna extraña razon) me llama varias veces a la pagina cuando la cargaba con el Iframe, con lo que, si bien el usuario no ve ningun problema (excepto por la performance) me llegaban multiples llamadas ( dos o tres) al servidor.

Luego, viendo en Internet, decidi cambiar la cracion del IFrame por el metodo .load() de Jquery. Con lo que me anduvo mejor, el servidor solo recibe una llamada. Pero cuando hago click en un vinculo de la pagina que esta en el interior del dialog, se me redirige toda la pagina, no solo el dialog, al link correspondiente.

Alguno tiene alguna opcion para solucionar esto de cualquiera de las dos formas???
Aca les dejo el codigo del script

Código Javascript :

<script  type="text/javascript">
            function openPopUp(link, title, x, y, deshabilitado) {
                var div = $('<div />').load(link).dialog(
         {
             canMinimize: true,
             modal: deshabilitado,
             canMaximize: true,
             show: "blind",
             title: title,
             width: y,
             height: x,
             buttons: {
                 Cerrar: function () {
                     if (confirm("Desea cerrar la ventana y salir? Los datos que no haya guardado seran descartados.")) {
                         $(this).dialog("close");
                     }
                 }
             }
         });
             }
        </script>


Saludos

Por faabass

11 de clabLevel



 

chrome
Citar            
MensajeEscrito el 10 Ago 2011 05:04 pm
Pues intercepta el evento onClick del <a> para que en vez de ir al href del <a> ejecute una función tuya en JavaScript que haga que cargue el contenido apuntado en el href en el contenedor que te interesa.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 10 Ago 2011 05:49 pm
Si, es una posible solución, pero para esto tendría que editar todas las paginas ya creadas (si bien no son demasiadas) y ademas en el caso de que acceda a la pagina mediante la URL, es decir sin que este en un dialog, no me funcionaria el metodo en javascript.

Por faabass

11 de clabLevel



 

chrome
Citar            
MensajeEscrito el 11 Ago 2011 05:44 pm

Por faabass

11 de clabLevel



 

chrome
Citar            
MensajeEscrito el 11 Ago 2011 09:59 pm
Hagalo con el iframe y simplemente haga un cheque si el iframe ya esta cargado, y si ya esta cargado que no lo haga.

Por si todavia no lo ha deducido la razon por la que no le sirve el script es por que .load es una llamada ajax que solo trae el html y lo inyecta en el dom, mas no ejecuta los scripts del mismo; si quiere hacer eso hay una funcion jQuery llamada getScript que permite hacer eso con archivos .js.

Por ViejoIvan

7 de clabLevel



 

chrome
Citar            
MensajeEscrito el 12 Ago 2011 01:20 am
Gracias ViejoIvan por la informacion... no sabia eso del load()... entonces opto por usar el iFrame...

Pero no entiendo porque es que me esta llamando al link que esta en el Iframe varias veces... el codigo es el mismo, lo unico que cambio es esto..

Código Javascript :

var div = $('<div />').html('<iframe style="border: 0px; " src=" '+ link +' " width="100%" height="100%"></iframe>').dialog(


En el servidor al hacer esto, se me ejecuta varias veces la pagina que viene en "link".

Seria lo que me faltaria... si me puedes ayudar te lo agradecere...

Por faabass

11 de clabLevel



 

chrome
Citar            
MensajeEscrito el 12 Ago 2011 12:22 pm
Hay muchas formas de hacerlo sin recurrir a iframe, solamente con AJAX. Como dice ViejoIvan AJAX no ejecuta Javascript (por decirlo a lo bestia) pero sí puede contener controladores de evento del tipo onClick="funcion();" en el código que se carga.

Como no quieres reformar los HTML que se cargan mediante AJAX la solución es, luego de que la carga del HTML termina, rastrear los elementos <a> y agregarle el controlador de eventos por código. JQuery facilita esta tarea enormemente. Busca los métodos .bind y .each de JQuery.

Por DriverOp

Claber

2510 de clabLevel



 

opera

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.