Lenguajes utilizados PHP, javascript con AJAX y MySQL
Vereis estoy realizando un paginador de resultados en un formulario, la paginacion la hace correctamente no hay problema, en cada linea he añadido un checkbox para poder seleccionar esa linea para enviar posteriormente los datos por el formulario. Una vez todo esto funciona bien cambie los enlaces para que el paginiador se cargara en un div hidden mediante AJAX. Todo esto funciona bien, controlo los checkbox seleccionados y los que no lo estan, puedo deseleccionar checbox,... todo funciona a la perfeccion PERO!!!
Como ya os he dicho cargo la pagina con AJAX y esto es porque esta pagina la meto dentro de un script http://www.dhtmlgoodies.com/index.ht...cript=tab_view que son unos paneles tipo pestañitas en esta direccion podeis ver el script, ademas la pestaña done cargo el paginador se crea dinamicamente mediante AJAX, esto lo hace el script no lo hice yo, pues bien, todo me funciona bien en las pestañas si no controlo el formulario, pero si intento controlar el formulario cuando cambio de pagina en la paginador no me reconoce el formulario. Espero haberme explicado bien, aqui os dejo el codigo que utilizo para cada cosa:
Funcion para validar los checkbox (AQUI ESTA EL PROBLEMA):
Código:
Paginador (mas que nada os muestro el form):function pasoCheckPost(url){ if(url==''){ return; } var resto = new Array(); var c = 0; for (i = 0; i < document.frm.elements.length; i++){ if(document.frm.elements[i].type=="checkbox" && document.frm.elements[i].checked){ resto[c]=document.frm.elements[i].value; c++; } } if(c==0){ cargaXML2(url,""); }else{ var tmp = resto.join("&listadoCanciones%5B%5D="); var cadena = "listadoCanciones%5B%5D=" + tmp; //document.write(cadena); cargaXML2(url,cadena); } }
Código PHP:
//... controles de variables de sesioni y otras en cabezado ....
echo '<form name="frm" action="'.$_SERVER['PHP_SELF'].'" method="post">';
echo '<br><table border="0" id="paginacion" class="listado-table" width="690" cellspacing="1" cellpadding="1">';
echo '<thead>'; //Entre <thead> y </thead> ponemos la cabecera de la tabla
echo '<tr><td colspan="4" align="left"> <span class="texto_menuizq">Añadiendo canciones a la lista: </span><span class="letra_std_red_b">'.((isset($_SESSION['nombre_lista'])) ? FixTextFields(getid3_lib::SafeStripSlashes($_SESSION['nombre_lista'])) : '').'  </span>';
echo '</td>';
echo '<td colspan="3" align="right"><span class="texto_menuizq">Canciones encontradas: </span><span class="letra_std_red_b">'.$total.'  </span></td></tr>';
echo '<tr>';
echo '<td width="24" align="center"> </td>'; //Checkbox para seleccionar
echo '<td width="188" align="left" title="Añadir cancion mendiate el checkbbox"><a href="javascript:;" target="_top" onclick="pasoCheckPost(\''.$_SERVER['PHP_SELF'].'?ordena=title';
if($ordena == 'title'){
if($asc == 'ASC') echo '&asc=DESC';
else echo '&asc=ASC';
}
echo '\')"> <span class="letra_std_blanca_b"> Título </span>';
if($ordena == 'title'){
if($asc == 'ASC') echo '<img src="../imagenes/upsimple.gif" border="0">';
elseif($asc == 'DESC') echo '<img src="../imagenes/downsimple.gif" border="0">';
}
echo '</a></td>';
echo '<td width="149" align="left" title="Añadir cancion mendiate el checkbbox"><a href="javascript:;" target="_top" onclick="pasoCheckPost(\''.$_SERVER['PHP_SELF'].'?ordena=artist';
if($ordena == 'artist'){
if($asc == 'ASC') echo '&asc=DESC';
else echo '&asc=ASC';
}
echo '\')"><span class="letra_std_blanca_b"> Artista </span>';
if($ordena == 'artist'){
if($asc == 'ASC') echo '<img src="../imagenes/upsimple.gif" border="0">';
elseif($asc == 'DESC') echo '<img src="../imagenes/downsimple.gif" border="0">';
}
echo '</a></td>';
echo '<td width="36" align="center" title="Añadir cancion mendiate el checkbbox"><a href="javascript:;" target="_top" onclick="pasoCheckPost(\''.$_SERVER['PHP_SELF'].'?ordena=year';
if($ordena == 'year'){
if($asc == 'ASC') echo '&asc=DESC';
else echo '&asc=ASC';
}
echo '\')"><span class="letra_std_blanca_b">Año</span>';
if($ordena == 'year'){
if($asc == 'ASC') echo '<img src="../imagenes/upsimple.gif" border="0">';
elseif($asc == 'DESC') echo '<img src="../imagenes/downsimple.gif" border="0">';
}
echo '</a></td>';
echo '<td width="140" align="left" title="Añadir cancion mendiate el checkbbox"><a href="javascript:;" target="_top" onclick="pasoCheckPost(\''.$_SERVER['PHP_SELF'].'?ordena=album';
if($ordena == 'album'){
if($asc == 'ASC') echo '&asc=DESC';
else echo '&asc=ASC';
}
echo '\')"><span class="letra_std_blanca_b"> Álbum </span>';
if($ordena == 'album'){
if($asc == 'ASC') echo '<img src="../imagenes/upsimple.gif" border="0">';
elseif($asc == 'DESC') echo '<img src="../imagenes/downsimple.gif" border="0">';
}
echo '</a></td>';
echo '<td width="66" align="left" title="Añadir cancion mendiate el checkbbox"><a href="javascript:;" target="_top" onclick="pasoCheckPost(\''.$_SERVER['PHP_SELF'].'?ordena=genre';
if($ordena == 'genre'){
if($asc == 'ASC') echo '&asc=DESC';
else echo '&asc=ASC';
}
echo '\')"><span class="letra_std_blanca_b"> Género </span>';
if($ordena == 'genre'){
if($asc == 'ASC') echo '<img src="../imagenes/upsimple.gif" border="0">';
elseif($asc == 'DESC') echo '<img src="../imagenes/downsimple.gif" border="0">';
}
echo '</a></td>';
echo '<td width="87" align="left" title="Añadir cancion mendiate el checkbbox"><a href="javascript:;" target="_top" onclick="pasoCheckPost(\''.$_SERVER['PHP_SELF'].'?ordena=puntuacion';
if($ordena == 'puntuacion'){
if($asc == 'ASC') echo '&asc=DESC';
else echo '&asc=ASC';
}
echo '\')"><span class="letra_std_blanca_b"> Ránking </span>';
if($ordena == 'puntuacion'){
if($asc == 'ASC') echo '<img src="../imagenes/upsimple.gif" border="0">';
elseif($asc == 'DESC') echo '<img src="../imagenes/downsimple.gif" border="0">';
}
echo '</a></td>';
echo '</tr>';
echo '</thead>';
echo '<tbody>'; //Entre <tbody> y </tbody> ponemos los datos de la tabla ordenada
$listachecked = array();
for ($i=0; $row = @mysql_fetch_array($result);$i++){ //Para cada fila devuelta de la consulta ...
echo '<tr class="'.(($i%2) ? 'odd' : 'even').'"
echo '<td>';
echo '<input type="checkbox" name="listadoCanciones[]" value="'.urlencode($row['filepath'].'/').urlencode($row['filename']).'" title="'.FixTextFields(getid3_lib::SafeStripSlashes($row['filepath'].'/'.$row['filename'])).'" onfocus="this.style.border=\'1px solid #f00\'" onblur="this.style.border=\'1px solid #bbb\'"'.((isset($listadoCanciones[FixTextFields(getid3_lib::SafeStripSlashes($row['filepath'].'/'.$row['filename']))])) ? ' checked' : '').'>';
echo '</td>';
// ... aqui se muestra toda la informacion
echo '</tr>';
echo'</tbody>';
echo '</table></form>';
echo '<table border="0" class="listado-table" width="690" cellspacing="1" cellpadding="1">';
if(isset($_REQUEST['ordena'])) $sig_link = $_SERVER['PHP_SELF'].'?ordena='.$ordena.'&asc='.$asc.'&pag=';
else $sig_link = $_SERVER['PHP_SELF'].'?pag=';
echo '<tr><td align="center">'.paginar($pag, $total, $tampag, $sig_link,25).'</td></tr>';
$endtime = getmicrotime();
echo '<tr><td><span class="texto_menuizq">File/s parsed in '.number_format($endtime - $starttime, 3).' seconds.<br></tr></td>';
echo '</table>';
mysql_free_result($result2);
}else
echo '<span class="texto_menuizq"><img src="../imagenes/warnning.gif" border="0"> ¡ No se ha encontrado ningún registro !</a></span>';
mysql_free_result($result);
mysql_close($link);
echo '</div></body>';
echo '</html>;
//... mas funciones
'document.frm.element.length' es nulo o no es un objeto
Este error solo sucede en las tabletas, si yo cargo la pagina fuera de las tabletas funciona correctamente, y si cargo la pagina en las tabletas pero comento la seccion del javascript que se encarga de recorrer los checkbox y crear la cadena que se pasa por POST ya no me da el error.
Alguna idea??