Foros del Web » Programando para Internet » Javascript »

Existe forma de reemplazar el showModalDialog() por window.open()

Estas en el tema de Existe forma de reemplazar el showModalDialog() por window.open() en el foro de Javascript en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 20/08/2012, 14:07
ohk
 
Fecha de Ingreso: abril-2012
Mensajes: 8
Antigüedad: 12 años
Puntos: 1
Pregunta Existe forma de reemplazar el showModalDialog() por window.open()

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:
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
  #2 (permalink)  
Antiguo 20/08/2012, 14:33
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Existe forma de reemplazar el showModalDialog() por window.open()

buenas...
considero que estás haciendo un desperdicio de recursos, porque en tu caso particular lo que quieres hacer es traer datos mas no mostrar todo un nuevo documento al usuario. puedes usar XMLHttpRequest (alias Ajax) para enviar la información al servidor y recibir una respuesta el cual luego la puedes agregar en el textfield. si conoces el ambiente y de antemano sabes que la posibilidad de Ajax no es viable, entonces utiliza técnicas como la que has hecho. en el caso de window.open tendrías que programar el evento onload para determinar cuando se finaliza la carga de la petición. luego para identificar el campo de texto dependerá de como quieras dejar el rastro. por ejemplo, podrías enviar alguna identificación por GET en la nueva ventana y luego con javascript usas esa identificación para referirte al campo. otro método podría ser crear una variable con la referencia al campo de texto. finalmente, para comunicar desde la ventana secundaria hacia la principal, accesas a la propiedad self.opener.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 20/08/2012, 14:41
ohk
 
Fecha de Ingreso: abril-2012
Mensajes: 8
Antigüedad: 12 años
Puntos: 1
Respuesta: Existe forma de reemplazar el showModalDialog() por window.open()

Muchas gracias por tu respuesta, sería muy sencillo para mi si conociera bien javascript, pero no es así, ahora estoy tomando lecciones básicas del mismo y no tengo la capacidad aún para realizar esto que te digo.

Sería mucho pedir si me haces un ejemplo?
Voy a intentar con window.returnValue que en mi investigación creo que me dara algun resultado o algun dolor de cabeza jeje.

En caso pueda solucionarlo lo pongo acá para futuras dudas.

Un saludo
  #4 (permalink)  
Antiguo 20/08/2012, 16:05
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Existe forma de reemplazar el showModalDialog() por window.open()

intenta así...
Código:
evento_dblclick(event){
ventana_secundaria = self.open('url?parametro', 'nombre si es necesario', 'opciones');
ventana_secundaria.onload = function(){
// aqui obtienes la informacion que le vas a pasar al texfield;
// event.target es el elemento que inicia el evento dbl_click
event.target.value = 'valor a agregar al campo';
}
}
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #5 (permalink)  
Antiguo 21/08/2012, 16:48
ohk
 
Fecha de Ingreso: abril-2012
Mensajes: 8
Antigüedad: 12 años
Puntos: 1
Respuesta: Existe forma de reemplazar el showModalDialog() por window.open()

Muchas gracias.

Ya lo he solucionado.
  #6 (permalink)  
Antiguo 21/08/2012, 17:02
ohk
 
Fecha de Ingreso: abril-2012
Mensajes: 8
Antigüedad: 12 años
Puntos: 1
Respuesta: Existe forma de reemplazar el showModalDialog() por window.open()

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:



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:



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



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:
<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:
<script>
function abrir(url, posicion) // windows open
{
	var posicion = posicion;
	var url = url;
	var formulario;
	var destino = url;
	//var c = 1;
	//destino = destino.concat(c);
	var destin;
	var desti;
	//alert(destino);
	destin = document.getElementById('id_contable_plan_cuentas['+posicion+']');
	//alert(posicion);	
	var real;
	real = destin.value;
	var valor = '&valor=';
	//alert(real);
	desti = url.concat(real,valor,posicion);
	//alert(desti);
	window.open(desti,""," width = 450,height=350,scrollbars=NO");
	
	document.formID.id_contable_auxiliar['+posicion+'].value = real ;
}
</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:
$valor = addslashes(trim($_GET['valor']));
El boton:

Código:
<input type="button" onClick="Devuelve(<?php echo $valor; ?>)" value="Seleccionar Auxiliar">
Y por utlimo la funcion encargada de devolver el valor:

Código:
<SCRIPT>
//aqui le devolvemos los datos a la ventana padre
function Devuelve(valor){
var valor = valor;
var destin = document.getElementById('select');
var real = destin.value;
alert(real);
self.opener.document.all('id_contable_auxiliar['+valor+']').value = real;
//window.opener.document.formID.id_contable_auxiliar['+valor+'].value=real;
window.close();
}
</SCRIPT>
Listo es todo.

Si tienen dudas pregunten, trataré de responder.

Última edición por ohk; 21/08/2012 a las 17:05 Razón: Mejora visual

Etiquetas: ajax, php, runtime, showmodaldialog, window.open
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:29.