Ver Mensaje Individual
  #5 (permalink)  
Antiguo 05/08/2012, 22:40
dannelblogger
 
Fecha de Ingreso: junio-2012
Ubicación: sabadell
Mensajes: 46
Antigüedad: 11 años, 10 meses
Puntos: 6
Respuesta: Problema IE7 y evento onchange

fjrueda **. He probado el igualarlo a una varible y nada..

emprear **
- Corregido lo del atributo type para el tag select (a cualquiera se le escapa un pedete)
- El selected está bien definido.. es un integer recuperado de la bd que define en 0 si el usuario no valoró el articulo y se comprende entre 1 y 5 en caso de haber puntuado ya el articulo..

Nota.. Las etiquetas donde recibo la respuesta de ajax, no creí necesario postearlas..

Empezamos de 0 y coloco el código completo menos archivos .php y estilos de la tabla

Estoy trabajando en una tabla, donde recojo los articulo que un usuario de un servicio ha comprado.

Código HTML:
Ver original
  1. <table id="rounded-corner" summary="">
  2.  
  3.  <thead>  
  4.   <tr>  
  5.    <th scope="col" class="rounded-company"></th>  
  6.    <th scope="col" class="rounded">Referencia</th>  
  7.    <th scope="col" class="rounded">Estado</th>  
  8.    <th scope="col" class="rounded">Fecha compra</th>  
  9.    <th scope="col" class="rounded">Importe</th>  
  10.    <th scope="col" class="rounded">Vendedor</th>  
  11.    <th scope="col" class="rounded-q4">Puntuacion</th>
  12.   </tr>
  13.  </thead>
  14.  
  15.  <tfoot>
  16.   <tr>  
  17.    <td colspan="6" class="rounded-foot-left">    
  18.     <em> Agradeceriamos que valorases y comentases tu opinion de los articulos que has adquirido..  </em>  
  19.    </td>  
  20.    <td class="rounded-foot-right">&nbsp;</td>  
  21.   </tr>
  22.  </tfoot>
  23.  
  24.  <tbody>
  25.   <tr>
  26.    <td><input type="checkbox" name="" readonly="readonly" "="" checked="checked" onclick="javascript: return false;"></td>
  27.    <td>1234</td>
  28.    <td>PENDIENTE</td>
  29.    <td>2012-07-25</td>
  30.    <td>10 Euros</td>
  31.    <td><a href="#">Juan Talamera</a></td>
  32.    <td><select name="puntuacion" id="22" onchange="ValorarArticulo(this.value,22,3)">  
  33.             <option value="0">0</option>  
  34.             <option value="1" selected="">1</option>  
  35.             <option value="2">2</option>  
  36.             <option value="3">3</option>  
  37.             <option value="4">4</option>  
  38.             <option value="5">5</option>  
  39.           </select></td>
  40.   </tr>
  41.  
  42.   <tr id="tr22"></tr>
  43.  
  44.  </tbody>
  45.  

Bien.. se trata de una tabla dinámica que genero con php obteniendo la información de una base de datos..

Por cada articulo comprado, genero 2 filas <tr> en el body de la tabla, una general con la información y otra en blanco que tiene como agregado el numero del articulo al que nos refererimos(en este caso es el articulo 22 => tr22), que me servirá para mostrar datos vía ajax en su interior (si fuese necesario)..

Dicho esto y ya entrando de lleno en javascript he creado los siguientes scripts.. (incluidos en el header)

Código Javascript:
Ver original
  1. function ValorarArticulo(puntuacion, articulo, consulta)
  2.   {
  3.     // puntuacion, es un numero dado por el select comprendido entre 0 y 5
  4.    // articulo, identificador del producto al que nos referimos, obtenido desde la bd
  5.    // consulta, valor integer que define un proceso a seguir dentro de un archivo php
  6.     var xmlhttp;
  7.     if(window.XMLHttpRequest)
  8.      {
  9.       // codigo soportado por IE7+, Firefox, Chrome, Opera, Safari
  10.       xmlhttp=new XMLHttpRequest();
  11.      }
  12.     else
  13.      if(window.ActiveXObject)
  14.       {
  15.        // código soportado por IE6, IE5
  16.        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  17.       }
  18.      else
  19.       {
  20.        alert("Tu navegador no soporta XMLHTTP!");
  21.       }
  22.      
  23.       document.getElementById('tr'+articulo).innerHTML= '<img src="images/anim.gif">'; // lugar generado en la tabla donde mostrar la info
  24.       eliminarElemento('etiqueta_formulario'); // Eliminare esta etiqueta si la encuentra..
  25.  
  26.      xmlhttp.onreadystatechange=function()
  27.       {
  28.        if(xmlhttp.readyState==4)
  29.         {
  30.       document.getElementById('tr'+articulo).innerHTML=xmlhttp.responseText; // lugar generado en la tabla donde mostrar la info
  31.         }
  32.       }  
  33.      xmlhttp.open("GET","procesar_comentario.php?puntuacion="+puntuacion+"&accion="+consulta+"&articulo_id="+articulo,true);
  34.      xmlhttp.send(null);
  35.    }
  36.  
  37.   function eliminarElemento(id)
  38.    {
  39.     div = document.getElementById(id);
  40.     if(div)
  41.     {
  42.       padre = div.parentNode;
  43.       padre.removeChild(div);
  44.     }
  45.   }

Ahora, al seleccionar un numero (el 3 por ejemplo), del select box de la tabla, en este caso el select box que hace referencia al articulo 22, debería de cargarme la información que le envió a la etiqueta <tr22>..
Donde por ejemplo me cargaría algo así como:

<tr22>
Código HTML:
Ver original
  1. <td colspan="7" id="etiqueta_formulario">
  2.  <div style="background:url(images/panel/notificaciones/responder.png) no-repeat 12px 8px;  padding-left: 47px;">  
  3.   <form name="respuestaComentario" action="">   // No pretendo extenderme en detalles.. este formulario lo proceso en ajax
  4.    <input type="hidden" name="articulo_id" value="22">  
  5.    <input type="hidden" name="puntuacion" value="3">  
  6.    <input type="hidden" name="accion" value="2">  
  7.    <textarea  name="texto" cols="78"></textarea>    
  8.   </form>
  9.  </div>
  10. </td>
</tr>

Como podeis ver, cada vez que hago una selección de algún número de cualquier selectbox, lo primero que hace es eliminar la etiqueta, si existe, 'etiqueta_formulario', y seguidamente, cargarme el nuevo contenido solicitado en el 'tr' correspondiente, una vez más y en este ejemplo, seria 'tr22'

El problema sigue siendo el mismo, en firefox, chrome, opera y safari funciona perfectamente.. en explorer directamente no hace nada de nada..

Este ejemplo en concreto forma parte de un panel de usuario que estoy desarrollando completamente en AJAX, y cuando intento ver la información de algún error de alguna etiqueta, en la consola de errores de ie no aprecio el origen, vamos, por lo pronto me define que si hay un error, en la linea 'tal' pero no se aprecia donde, solo el código fuente original sin los contenidos cargados atreves de ajax en las etiquetas..

Gracias de nuevo muchachos!!
__________________
Ante una duda.. ha de mostrarse valor/esfuerzo..

Última edición por dannelblogger; 05/08/2012 a las 22:54