Ir al contenido principal

Pasar Valores de Ventana Hija a Padre (Pass values from Child to Parent Windows with PHP and Javascript)

En este articulo, la ventana hija es un listado de clientes, donde el usuario a darle clic a un cliente, se retorna el ID del Cliente a un objeto Input tipo hidden y el Nombre del Cliente a un objeto Input tipo Text.


En la ventana padre agrega un hipervinculo como el siguiente:

<a href="#" id="customer_search" onClick="showModalSendAndReturnValues('customers_search.php', ''); return false;">Abrir Ventana Hija</a>

y crea dos objetos HTML Input:
<input type="text" id="customer_name">
<input type="hidden" id="customer_id">

El evento onClick sera el que dispare la función que abre la ventana hija. 
El return false, es importante ya que evita que la ventana padre se auto-refresque y nos lleve a otra pagina.

La funcion showModalSendAndReturnValues, es un Javascript que puede ir en el header de tu pagina padre o en un archivo de funciones javascript. Este es el que abre la ventana hija


function showModalSendAndReturnValues(url, parameters) {
  if (parameters = '') {
      parameters = "dialogWidth="                               
              + Math.floor(screen.availWidth/2) + "px; " 
              + " dialogHeight="                           
              + Math.floor(screen.availHeight/2) + "px; "
              + " center=yes; help=yes; "                  
              + " status=yes; resizeable=no;"; 
  }
  
  var dialogWin = window.showModalDialog(url, obj, parameters); // Showing the Modal Dialog

  // Below Part will be executed after the dialog window is closed.
  document.getElementById('customer_id').value = dialogWin.id;
  document.getElementById('customer_name').value = dialogWin.value;
}

Las sentencias después de var dialogWin = window.showModalDialog(url, obj, parameters), son ejecutadas luego de cerrarse la ventana hija.
customer_id y customer_name, son los id (atributo HTML) de los objetos donde se devolverá los valores (id del cliente y nombre del cliente) elegidos en la ventana hija. 

En la ventana hija, tendrás un tabla o cuadricula donde al dar clic a un fila, se cierra la ventana y pasa el id del cliente y su nombre a la ventana padre:

<table style="text-align: left; width: 100%;" border="0" cellpadding="2" cellspacing="0">
  <tr class="dataTableHeadingRow">
    <td class="dataTableHeadingContent">Cliente</td>
    <td class="dataTableHeadingContent">Tipo Cliente</td>
    <td class="dataTableHeadingContent">Teléfono</td>
    <td class="dataTableHeadingContent">E-mail</td>
  </tr><?php
    
    $customers_query_raw = "select customer_id, customer_name, mainphone, email, customer_type from clientes";
    
    while($customers = fetch_array($customers_query)) {  ?>
        <tr class="dataTableRow" onmouseover="rowOverEffect(this)" onmouseout="rowOutEffect(this)" onclick="sendValues('<?php echo $customers['customer_id']; ?>', '<?php echo $customers['customer_name']; ?>');">
          <td class="dataTableContent"><?php echo $customers['customer_name']; ?></td>
          <td class="dataTableContent"><?php echo $customers['customer_type']; ?></td>
          <td class="dataTableContent"><?php echo $customers['customer_mainphone']; ?></td>
          <td class="dataTableContent"><?php echo $customers['email']; ?></td>
        </tr><?php
      }
    ?>

</table>

Al dar clic en la fila con los datos del cliente, se llamada a la función sendValues, que ordenara cerrar esta ventana y mandara los datos a la ventana padre usando la variable sendObj que es un arreglo de dos datos.

function sendValues(id, value){
   sendObj = {id:id,value:value};
   window.returnValue = sendObj;
   window.close();
 }


Comentarios

Entradas populares de este blog

SQL Server - Mostrar Estructura de una Tabla (nombre del campo, tipo de dato, tamaño, otros)

Si deseas mostrar las propiedades de los campos que conforman una tabla en SQL Server, este SQL puede ayudarte: USE <nombre de la base de datos> GO SELECT column_name  'Nombre del Campo', data_type  'Tipo de Dato', character_maximum_length  'Tamaño', column_default  'Valor por Defecto', is_nullable  'Permite Nulo' FROM information_schema.columns WHERE table_name = ' <nombre de la tabla> ' Esto es muy bueno cuando deseas crear Diccionario de Datos (DD), muy útiles para tener un control de los datos guardados en la Base de Datos y para futuras modificaciones o mantenimientos. - column_name: nos devuelve el nombre del campo - data_type: el tipo de dato del campo. - character_maximum_length: el tamaño de los datos en el campo. - column_default: valor por defecto del campo - is_nullable: Si el campo permite valor Null. - <nombre de la base de datos>: aqui debes reemplazar con el nombre real de la BD. - <nombre de...

Instalando MariaDB 10.0.4 y PHP 5 en Kali Linux 1.0

Por si ya estan usando el Kali Linux 1.0 y quieren tener LAMP , he aqui una breve explicacion de lo que deben hacer para implementarlo en su computador. 1. Primero, hacemos un update de nuestra apt con el comando: apt-get update . Una vez finalizado este comando, entramos de lleno en la instalacion del LAMP . 2. Lo primero ha instalar es el Apache . Para ellos ejecutamos el siguiente comando: apt-get install apache2 3. Para poner a correr el Apache en Kali , debes iniciar el servicio con el comando: service apache2 restart El mensaje es un warning ya que estoy usando DHCP . 4. Para probar que el Apache esta trabajando correctamente, abre tu navegador de Internet e ingresa localhost, te debe salir un mensaje que dice: It works! 5. Instalando MariaDB 10.0.4 - Puede descargar el source y compilarlo. - Utilizar los repositorios propios de MariaDB , agregarlos a tu sources.list o crear un source propio para MariaDB (lo que yo recomiendo), para finalmente proceder a ...

Varios Dominios en un Solo Servidor Web (Virtual Hosts - More than One Domain With One Web Server)

Nota: Las siguientes indicaciones fueron probadas pro mi en Linux Crunchbang 11 (32-bit) alías Waldorf . Si tu deseas tener más de un dominio en un solo servidor Web, es muy probable que necesites hacer uso de Virtual Hosts para ello. Virtual Hosts , te da la posibilidad de tener más de un sitio Web (o dominio) en un solo servidor. En este artículo te explicaremos como hacerlo. Para este articulo crearemos dos dominios: dominio1.com y dominio2.com Creando el Layout Si usas Debian o Crunchbang, vete a /var/www , y create el sigiuente conjunto de carpetas: mkdir -p dominio1.com/{public,private,log,cgi-bin,backup} y mkdir -p dominio2.com/{public,private,log,cgi-bin,backup} Archivo para Probar los Dominios Para probar que los dos dominios trabajan, crearemos un archivo sencillo en HTML llamado index.html , el cual contendra dentro de el, lo siguiente: <html> <head> <title>dominio#.com</title> </head> <body> <h1>domini...