Foros del Web » Programando para Internet » Javascript »

Problema con puntero no válido

Estas en el tema de Problema con puntero no válido en el foro de Javascript en Foros del Web. Tengo esta funcion para abrir una ventana modal. function abrirVentanModal(pagina,parametros,width,height) { /*Funcion que recibe la pagina, parametros, ancho, alto y abre una ventana modal en ...
  #1 (permalink)  
Antiguo 06/09/2012, 05:11
 
Fecha de Ingreso: septiembre-2007
Mensajes: 268
Antigüedad: 16 años, 7 meses
Puntos: 8
Problema con puntero no válido

Tengo esta funcion para abrir una ventana modal.

function abrirVentanModal(pagina,parametros,width,height)
{
/*Funcion que recibe la pagina, parametros, ancho, alto y abre una ventana modal en el centro de la pantalla
teniendo en cuenta la resolucion de pantalla*/

var left = (screen.width - width)/2;
var top = (screen.height - height)/2;

var separador = "?";

if(pagina.indexOf('?')!=-1)
separador = "&";
if(parametros=="")
parametros="mseg="+(new Date()).getTime();
else
parametros+="&mseg="+(new Date()).getTime();
var ventana=null;
if (window.showModalDialog)
{
return window.showModalDialog(pagina+separador+parametros ,null,
"dialogWidth="+width+"px;dialogHeight="+height+"px ;dialogTop="+top+"px;dialogLeft="+left+"px;status= no;help:no");
}
else
{
window.top.captureEvents (Event.CLICK|Event.FOCUS)
window.top.onclick=IgnoreEvents
window.top.onfocus=HandleFocus
winModalWindow =
window.open (pagina+separador+parametros,'Ventana'+(new Date().getTime()),
"dependent=yes,width="+width+",height="+height +", top="+top+", left="+left)
winModalWindow.focus()
return winModalWindow;
}
}

Me esta dando error en la linea 'return window.showModalDialog(pagina+separador+parametros ,null,
"dialogWidth="+width+"px;dialogHeight="+height+"px ;dialogTop="+top+"px;dialogLeft="+left+"px;status= no;help:no");'

El problema que me esta dando es al intentar mostrar un mensaje al cargar la pagina, es decir en el evento onload.
Tengo un objeto tabla que pinta una tabla y luego cuando se carga la pagina lanza un evento para resicearse, parece que los dos eventos estan colisionando.
Le he puesto alert para ver que pasa y parece que llama primero a mostrar el mensaje y luego a resicear la tabla pero es la unica teoria que tengo.

Le he metido timeout para forzar a que uno lo haga antes que otro pero no me ha funcionado.
Como solo me pasa en internet explorer he creado un metodo identico pero que en vez de abrir una ventana modal sea una ventana normal pero el problema es que no consigo que gane el foco, no da el error pero al salir el pop-up como sigue ejecutando el resiceo de la tabla que la pagina principal por encima de la del pop-up(En Firefox esto no sucede.).

Dejo el codigo del resiceo de la tabla aunque no creo que sirva de nada.

function cargaTabla(oTabla,primeraColumnaMovible,columnasAj ustables,columnasOrdenables,tiposDatos,idTabla)
{
var anchoPadre=false,altoPadre=false;
if (sColorBordeCssColor2=='')
sColorBordeCssColor2=getStyleDefinition("color_2", "backgroundColor");

if (oTabla.parentNode.style.height=="1px")
{
oTabla.parentNode.style.height=Math.max(oTabla.par entNode.parentNode.offsetHeight,"20")+"px";
altoPadre=true;
}
if (oTabla.parentNode.style.width=="1px")
{
oTabla.parentNode.style.width=oTabla.parentNode.pa rentNode.offsetWidth+"px";
anchoPadre=true;
}

var arrTrs=oTabla.getElementsByTagName("TR");

var id=oTabla.id;
if (arrTrs.length>1)
{

var trEliminar=arrTrs[0];
var trHueco=arrTrs[1];

trHueco.style.height=(trEliminar.offsetHeight)+5+" px";
oTabla.getElementsByTagName("TBODY")[0].removeChild(trEliminar);

// generar una nueva tabla de cabecera
var tablaCab=document.createElement("table");

tablaCab.setAttribute("id", idTabla);
tablaCab.cellPadding=oTabla.cellPadding;
tablaCab.cellSpacing=0;
tablaCab.border=0;
tablaCab.style.position='absolute';

// posicionamos la cabecera en su sitio
tablaCab.style.top=obtenerOffset(oTabla,'offsetTop ');
tablaCab.style.left=obtenerOffset(oTabla,'offsetLe ft');

// ancho y alto correctos
tablaCab.style.width=(oTabla.offsetWidth)+"px";
tablaCab.style.height=parseInt(trHueco.style.heigh t)+1+"px";
tablaCab.style.zIndex="1000";
if (sColorBordeCssColor2 && sColorBordeCssColor2!='')
tablaCab.style.border="1px solid "+sColorBordeCssColor2;

// generamos la fila con las cabeceras
var tr = tablaCab.insertRow(0);
tr.className="color_3";
var arrTdsOrig=trEliminar.getElementsByTagName("td");
for (var i=0;i<arrTdsOrig.length;i++)
{
// td separador a la izquierda del td de cabecera
var tdSep=tr.insertCell(i*2);

// el td de datos
var td=tr.insertCell(i*2+1);


// para marcar los separadores con una raya vertical por estilos, menos el primero
if (i!=0)
generaEstiloObjeto(tdSep,"estiloTdSeparadorCabecer a");
else
generaEstiloObjeto(tdSep,"estiloTdSeparadorCabecer aVacio");

tdSep.innerHTML="&nbsp;";
tdSep.width="1px";

// no seleccionar texto
tdSep.onselectstart=function(){ return false;};
tdSep.style.userSelect="none";
tdSep.style.MozUserSelect="none";

// volcar el HTML
td.innerHTML=arrTdsOrig[i].innerHTML;

// copiar el alineamiento
if (arrTdsOrig[i].align)
td.align=arrTdsOrig[i].align;
// si tienen tamaño las columnas, copiarlo
// si no, generarlo proporcional
// salvo la última columna, que es de desbordamiento y no tiene ancho
if (i<arrTdsOrig.length-1)
{
if (arrTdsOrig[i].width)
td.width=arrTdsOrig[i].width;
else
td.width=100/(arrTdsOrig.length)+"%";
}
else
td.removeAttribute("width");
td.width=arrTdsOrig[i].width;

td.className="texto_titulo_columna_tabla";
// el td es no seleccionable
td.onselectstart=function(){ return false;};
td.style.userSelect="none";
td.style.MozUserSelect="none";
} // for (var i=0;i<arrTdsOrig.length;i++)

// el último separador al final de la cabecera
var tdSep=tr.insertCell((arrTdsOrig.length-1)*2+2);
generaEstiloObjeto(tdSep,"estiloTdSeparadorCabecer aVacio");
tdSep.innerHTML="&nbsp;";
tdSep.width="1px";
tdSep.onselectstart=function(){ return false;};
tdSep.style.userSelect="none";
tdSep.style.MozUserSelect="none";

// registrar el objeto
var objTabla=new TablaScrollable(oTabla,tablaCab,primeraColumnaMovi ble,columnasAjustables,columnasOrdenables,tiposDat os,anchoPadre,altoPadre);
hmTablasScrollables[id]=objTabla;

// poner oyentes de eventos
for (var i=0;i<arrTdsOrig.length+1;i++)
{
if (i>0)
{
if ((!columnasAjustables || ((columnasAjustables[i-1] || i-1>=columnasAjustables.length) && (columnasAjustables[i] || i>=columnasAjustables.length ))) && i!=arrTdsOrig.length)
{
engancharEventosTDSep(tr.cells[(i)*2],tr.cells[(i-1)*2+1],tr.cells[(i)*2+1],(i<arrTdsOrig.length-2),i-1,id);
tr.cells[(i)*2].style.cursor="w-resize";
}
else
tr.cells[(i)*2].style.cursor="default";
engancharEventosTD(tr.cells[(i)*2],tr.cells[(i-1)*2+1],tr.cells[(i)*2+1],(i<arrTdsOrig.length-2),i-1,id,(primeraColumnaMovible!=-1 && i-1>=primeraColumnaMovible));
}

}

// poner la tabla en el documento
document.body.appendChild(tablaCab);

// reajustar anchos
sincronizarCabeceraTabla(oTabla.id);

} // if (arrTrs.length>1)




} // function cargaTabla(oTabla)

Muchas gracias por las molestias.
  #2 (permalink)  
Antiguo 06/09/2012, 05:13
 
Fecha de Ingreso: septiembre-2007
Mensajes: 268
Antigüedad: 16 años, 7 meses
Puntos: 8
Respuesta: Problema con puntero no válido

Supongo que el problema es de que colisionan los dos metodos en el onLoad, porque cuando la tabla tiene pocos elmentos no me sucede.
  #3 (permalink)  
Antiguo 06/09/2012, 08:49
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 15 años, 10 meses
Puntos: 220
Respuesta: Problema con puntero no válido

Viendo tu codigo no me da ganas de leerlo porque no usas HIGHLIGHT
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones

Etiquetas: funcion, html, puntero, select
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 19:45.