Estoy consciente de que el título de mi consulta no resulta claro pero la verdad no se me ocurrió otra forma. Les cuento.
Tengo una página en ASP llamada bateas.asp.
Ahí tengo un pequeño formulario con un campo input que muestra el código de la batea a utilizarse, de esta forma
Cita:
En esta misma parte de la página, tengo una sección de la tabla con este código<%
Temp="Select * From Bateas Where Estado=FALSE"
Tabla1.Open Temp, Conexion
arrDBDataBateas=Tabla1.GetRows()
Tabla1.Close
%>
<tr>
<td class="texto_normal">
Batea asignada : <input type="text" name="batea" id="batea" size="5" class="texto_normal_sinmarco" value="<%= arrDBDataBateas(1,0) %>" readonly>
<input type="text" name="cantidad" id="cantidad" size="5" class="texto_normal" onKeyPress="return acceptNum(event);" onChange="ingresarBatea(this.value);"> ovas
</td>
</tr>
Temp="Select * From Bateas Where Estado=FALSE"
Tabla1.Open Temp, Conexion
arrDBDataBateas=Tabla1.GetRows()
Tabla1.Close
%>
<tr>
<td class="texto_normal">
Batea asignada : <input type="text" name="batea" id="batea" size="5" class="texto_normal_sinmarco" value="<%= arrDBDataBateas(1,0) %>" readonly>
<input type="text" name="cantidad" id="cantidad" size="5" class="texto_normal" onKeyPress="return acceptNum(event);" onChange="ingresarBatea(this.value);"> ovas
</td>
</tr>
Cita:
La estructura es la de una tabla principal con 2 celdas. La de la izquierda contiene una tabla donde están los campos del formulario (hay un par más pero no interesa de momento) y la celda de la derecha mostrará los resultados luego de asignar un valor a la batea en cuestión. <td valign="top" class="texto_normal" id="detalles"></td>
Para crear este listado-resultado, utilizo este código con el evento onChange que invoca a la función ingresarBatea() cuyo código es el siguiente:
Cita:
function ingresarBatea(valor)
{
var req = false;
var lote=document.getElementById("lotes").value;
var batea=document.getElementById("batea").value;
if (window.XMLHttpRequest) // For Safari, Firefox, and other non-MS browsers
{
try
{req = new XMLHttpRequest();}
catch (e)
{req = false;}
}
else if (window.ActiveXObject) // For Internet Explorer on Windows
{
try
{req = new ActiveXObject("Msxml2.XMLHTTP");}
catch (e)
{
try
{req = new ActiveXObject("Microsoft.XMLHTTP");}
catch (e)
{req = false;}
}
}
//req.expires=-1;
var element = document.getElementById("detalles");
if (!element)
{alert("El ID " + id + " enviado a clientSideInclude es erróneo. Se necesita un elemento DIV o SPAN con este ID en el módulo."); return;}
if (req)
{
// Synchronous request, wait till we have it all
url="bateas.asp?op=ing&clase=batea&lote="+lote+"&b atea="+batea+"&cantidad="+valor;
req.open('GET', url, false);
req.send(null);
element.innerHTML = req.responseText;
document.getElementById("cantidad").value="";
document.getElementById("cantidad").focus();
}
else
{element.innerHTML = "Lo sentimos pero su navegador no soporta objetos XMLHttpRequest. Esta página requiere Internet Explorer 8 o superior para Windows, Firefox para cualquier sistema, o Safari. Otros navegadores compatibles también pueden ser utilizados.";}
}
{
var req = false;
var lote=document.getElementById("lotes").value;
var batea=document.getElementById("batea").value;
if (window.XMLHttpRequest) // For Safari, Firefox, and other non-MS browsers
{
try
{req = new XMLHttpRequest();}
catch (e)
{req = false;}
}
else if (window.ActiveXObject) // For Internet Explorer on Windows
{
try
{req = new ActiveXObject("Msxml2.XMLHTTP");}
catch (e)
{
try
{req = new ActiveXObject("Microsoft.XMLHTTP");}
catch (e)
{req = false;}
}
}
//req.expires=-1;
var element = document.getElementById("detalles");
if (!element)
{alert("El ID " + id + " enviado a clientSideInclude es erróneo. Se necesita un elemento DIV o SPAN con este ID en el módulo."); return;}
if (req)
{
// Synchronous request, wait till we have it all
url="bateas.asp?op=ing&clase=batea&lote="+lote+"&b atea="+batea+"&cantidad="+valor;
req.open('GET', url, false);
req.send(null);
element.innerHTML = req.responseText;
document.getElementById("cantidad").value="";
document.getElementById("cantidad").focus();
}
else
{element.innerHTML = "Lo sentimos pero su navegador no soporta objetos XMLHttpRequest. Esta página requiere Internet Explorer 8 o superior para Windows, Firefox para cualquier sistema, o Safari. Otros navegadores compatibles también pueden ser utilizados.";}
}
Cómo pueden ver, el código llama a la misma página bateas.asp y ejecuta una parte de código ASP (están agrupados por select case) y procesa todo normal. Luego de eso vuelvo a llamar a otra sección de la página en cuestión para que muestre un listado. Y es ahí el detalle de mi consulta.
Cuando muestro el listado en la celda detalles de la tabla principal, necesito actualizar el campo batea del formulario inicial. Todo se ejecuta, vía Ajax, en la misma página.
He probado
parent.document.getElementById("batea").value=NUEV O VALOR
y
opener.document.getElementById("batea").value=NUEV O VALOR
sin mayor fortuna.
¿Cómo podría actualizar el campo INPUT desde una sección de la página cargada vía Ajax?
En la captura se podrá ver, me parece, todo un poco más claro. Lo marcado con ROJO corresponde al campo input que deseo actualizar, y lo marcado con AMARILLO corresponde a la celda de la tabla principal donde cargo el listado mediante Ajax.
Desde ya les quedo muy agradecido por el apoyo que me puedan brindar.
Un saludo cariñoso y cordial desde Lima, Perú
SOLUCIONADO
Simplemente bastó con utilizar layers en vez de celdas
Cita:
<td valign="top">
<div class="texto_normal" id="detalles"></div>
</td>
<div class="texto_normal" id="detalles"></div>
</td>