Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: :ohk<any> en 20 Agosto 2012, 21:50 pm



Título: Existe forma de reemplazar el showModalDialog() por window.open()
Publicado por: :ohk<any> en 20 Agosto 2012, 21:50 pm
Eso, quiero saber si existe forma de reemplazar el showModalDialog() por window.open().

Lo que pasa es que estoy haciendo un evento que cuanto se haga doble click en un textfield se abra una ventana donde se envien ciertos parámetros y en dicha ventana se realice alguna tarea adicional quizas una inserción a la base de datos y al finalizar se cierre y devuelva un valor al textfield que fue responsable de abrir esa ventana.

Ahora bien, con el showModalDiaglog() ya lo conseguí, pero en un archivo php limpio, cuando quiero integrarlo a mi modulo el showModalDiaglog() no me esta funcionando para nada y no entiendo porque, quizas porque estoy usando varios .js incluidos, desconozco la relación de conflicto que puedan tener, ademas estoy usando un contador en php para enumerar cada textfield porque seran como 15 que deben tener la misma característica algo asi como
Código
  1. id="nombre[<?php echo $contador; ?>]"
entonces se dificulta mucho en el momento de envio de parámetros.

Entonces probe lo mismo con window.open y me funciona tranquilamente, puedo enviar un parámetro por GET (url) a la ventana nueva, pero no se como hacer para al finalizar una accion en dicha ventana, esta se cierre y me devuelva otro valor al textfield que la invocó, nose si me explico.

Espero me puedan ayudar.

Un saludo


Título: Re: Existe forma de reemplazar el showModalDialog() por window.open()
Publicado por: :ohk<any> en 22 Agosto 2012, 01:00 am
Lo solucione de la siguiente manera y sin utilizar showModalDialog().

Vamos a interpretar el uso de dos archivos.

El Inicial y el Invocado.

En el Inicial tengo algo un tanto complejo en el codigo donde utilizo un contador para repetir un <select> porque requiero varios del mismo.

Aca un ejemplo visual:

(http://i49.tinypic.com/2afaobd.jpg)

Como señala en la imagen, primero se debe seleccionar una cuenta y luego hacer doble clic en el textfield de Auxiliar. Con el codigo javascript envio los valores de la cuenta y tengo una ventana como esta:

(http://i49.tinypic.com/swfmo0.jpg)

Como señala en la imagen, se selecciona y se acepta.
Y se obtiene algo como esto:

(http://i48.tinypic.com/oarmtg.jpg)

Y lo que buscaba lo conseguí.

Codigo ventana Inicial:

Tenemos el textfield donde se hace doble clic, este recupera el valor del id del <select> y ejecuta una funcion.

Código
  1. <input type="text" name="id_contable_auxiliar[<?php echo $contador; ?>]" id="id_contable_auxiliar[<?php echo $contador; ?>]" onDblClick="javascript:abrir('code/contable/popup.php?id_contable_plan_cuentas=',<?php echo $contador; ?>);">

Aca la funcion invocada:

Código
  1. <script>
  2. function abrir(url, posicion) // windows open
  3. {
  4. var posicion = posicion;
  5. var url = url;
  6. var formulario;
  7. var destino = url;
  8. //var c = 1;
  9. //destino = destino.concat(c);
  10. var destin;
  11. var desti;
  12. //alert(destino);
  13. destin = document.getElementById('id_contable_plan_cuentas['+posicion+']');
  14. //alert(posicion);
  15. var real;
  16. real = destin.value;
  17. var valor = '&valor=';
  18. //alert(real);
  19. desti = url.concat(real,valor,posicion);
  20. //alert(desti);
  21. window.open(desti,""," width = 450,height=350,scrollbars=NO");
  22.  
  23. document.formID.id_contable_auxiliar['+posicion+'].value = real ;
  24. }
  25. </script>

Tiene varias lineas en comentario por las pruebas que realizaba.

Ahora el codigo de la ventana Invocada:

Las variables que recibo del GET enviado.

Código
  1. $valor = addslashes(trim($_GET['valor']));
  2.  

El boton:

Código
  1. <input type="button" onClick="Devuelve(<?php echo $valor; ?>)" value="Seleccionar Auxiliar">

Y por utlimo la funcion encargada de devolver el valor:

Código
  1. <SCRIPT>
  2. //aqui le devolvemos los datos a la ventana padre
  3. function Devuelve(valor){
  4. var valor = valor;
  5. var destin = document.getElementById('select');
  6. var real = destin.value;
  7. alert(real);
  8. self.opener.document.all('id_contable_auxiliar['+valor+']').value = real;
  9. //window.opener.document.formID.id_contable_auxiliar['+valor+'].value=real;
  10. window.close();
  11. }
  12. </SCRIPT>

Listo es todo.

Si tienen dudas pregunten, trataré de responder.  ;)