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=" ";
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=" ";
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. |