Hola,
estoy desarrollando una página jsp en la que utilizo un array en javascript que inicialmente se carga con los valores de un array en java. El usuario de la aplicación puede abrir un popUp y desde el mismo seleccionar nuevos items que se han de añadir al array en javascript declarado en la página jps(el opener). Hasta aquí todo funciona aparentemente bien. Pero, tras cerrar el popUp e intentar "manipular" nuevamente los elementos del array en javascript(que se muestran como una lista de items que pueden ser reordenados, eliminados...) salta un error javascript. Al abrir el depurador, compruebo que se queja al intentar acceder a la última posición del array javascript(que coincide con el item que se añadió). Sinembargo, la longitud del array sí que se ha incrementado.
Llevo varios días con este problema y ninguna de las soluciones que se proponen en la web me han servido. Adjunto las funciones javascript e indico dónde se produce el error.(La línea de código en la última función de color rojo
es dónde se produce el error, al visitar la última posición del array)
Gracias.
//It is called from author list popUp to create an author
function setAuthor(authorid,username,firstname,lastname){
author = new Author(authorid,username,firstname,lastname);
}
//It calls to opener window for pass author data
function addAuthor(author){
if(author){
if (opener && !opener.closed) {
if(author.id != ''){ opener.addAuthorToList(author);
}
}
}
}
//It adds an author to author's list.
function addAuthorToList(author){
selected = author.id;
if(author.id !=''){
var find = false;
var i = 0;
var j=authorList.authors.length;
for (i=0; i < j && !find; i++){
if(selected == authorList.authors[i].id){
find = true;
}
}
if(!find){
authorList.authors = authorList.authors.concat(author);
}
}
printAuthors();
}
// This function is called after move up or down, adds or delete an author in the //author's list.
// It prints the grid with authors and prints with diferent color the author moved
function printAuthors(){
var selected = document.forms[0].elements['authorIdSelected'].value;
var contentHTML ="<table width='100%' cellspacing='1' CELLPADDING='1' >";
contentHTML += "<tr class='cellLabel' > <td colspan='6' >"+authors+"</td></tr>";
contentHTML += "<tr class='cellLabel'>";
contentHTML += " <td width='5%'></td>";
contentHTML += " <td width='25%'>"+username+"</td>";
contentHTML += " <td width='35%'>"+firstname+"</td>";
contentHTML += " <td width='35%'>"+lastname+"</td>";
contentHTML += "</tr>";
for (var l=0; l < authorList.authors.length; l++){
contentHTML+="<input type=hidden id='authorIdList' name='authorIdList' value='" + authorList.authors[l].id + "'>";
if(selected != authorList.authors[l].id){
contentHTML+="<tr id='tr"+l+"' class='cellTextFilled' onclick='javascript:selectRow("+authorList.authors[l].id+");'>";
}
else{
contentHTML+="<tr id='tr"+l+"' class='cellLabelPink' onclick='javascript:selectRow("+authorList.authors[l].id+");'>";
}
contentHTML+="<td >"+parseInt(parseInt(l)+1) +"</td>";
contentHTML+="<td >"+authorList.authors[l].username+"</td>";
contentHTML+="<td >"+authorList.authors[l].firstname+"</td>";
contentHTML+="<td >"+authorList.authors[l].lastname+"</td>";
contentHTML+="</tr>";
}
document.getElementById('authors').innerHTML= contentHTML;
}