2009-04-24 17 views
5

Tengo algunos botones de opción en una página jsp. Ejecuto un método de javascript una vez que se carga la página que busca ciertos botones de opción y cambio su nombre para que funcionen como un grupo de radio.Cambiar el nombre del botón de opción javascript no funciona en IE

Lo estoy haciendo de esta manera porque los botones de radio están dentro de la tabla jsf y no tengo acceso a la propiedad de nombre al codificar y quiero que todos los botones de radio funcionen como un grupo de radio.

De todos modos, la secuencia de comandos se ejecuta sin problemas y los nombres de los botones de radio se modifican correctamente.

Pero mientras esto funciona en FF 3 (el trabajo como un grupo de radio) no funciona en IE 6 o IE7 aunque tienen la misma propiedad 'nombre'. ¿Alguien sabe cómo puedo resolver esto?

function setRadioGroup (nombreRadio){ 
    var listaRadios = document.getElementsByTagName('input'); 
    var tam = listaRadios.length; 
    for (i = 0; i < tam; i++){ 
     if (listaRadios[i].type == 'radio' && listaRadios[i].title == 'Seleccionar'){ 
     listaRadios[i].name = nombreRadio; 
     } 
    } 
} 

EDIT: Se ha añadido la salida del código de la página web:

<form id="formulario" name="formulario" method="post" 
    action="/serequp/faces/administracion/articulosPv.jspx"><input 
    type="hidden" id="formulario:hidRegTablaArticulos" 
    name="formulario:hidRegTablaArticulos" value=""> 
<div class="dr-pnl rich-panel " id="formulario:ContFormularios"> 
<div class="dr-pnl-h rich-panel-header cabeceraFormulario" 
    id="formulario:ContFormularios_header">LISTADO DE GRUPOS DE 
EQUIPAMIENTOS</div> 
<div class="dr-pnl-b rich-panel-body cuerpoFormularios" 
    id="formulario:ContFormularios_body"> 
<table id="formulario:botones"> 
    <tbody> 
     <tr> 
      <td class="estiloColumnas"><input id="formulario:j_id66" 
       name="formulario:j_id66" 
       onclick="A4J.AJAX.Submit('_viewRoot','formulario',event,{'parameters':{'formulario:j_id66':'formulario:j_id66'} ,'actionUrl':'/serequp/faces/administracion/articulosPv.jspx','similarityGroupingId':'formulario:j_id66'});return false;" 
       value="Crear" type="button"></td> 
      <td class="estiloColumnas"><input id="formulario:j_id67" 
       name="formulario:j_id67" 
       onclick="A4J.AJAX.Submit('_viewRoot','formulario',event,{'parameters':{'formulario:j_id67':'formulario:j_id67'} ,'actionUrl':'/serequp/faces/administracion/articulosPv.jspx','similarityGroupingId':'formulario:j_id67'});return false;" 
       value="Modificar" type="button"></td> 
      <td class="estiloColumnas"><input id="formulario:j_id68" 
       name="formulario:j_id68" 
       onclick="A4J.AJAX.Submit('_viewRoot','formulario',event,{'parameters':{'formulario:j_id68':'formulario:j_id68'} ,'actionUrl':'/serequp/faces/administracion/articulosPv.jspx','similarityGroupingId':'formulario:j_id68'});return false;" 
       value="Borrar" type="button"></td> 
      <td></td> 
     </tr> 
    </tbody> 
</table> 
<table class="dr-table rich-table " id="formulario:tablaArticulos" 
    border="0" cellpadding="0" cellspacing="0"> 
    <colgroup span="3"></colgroup> 
    <thead class="dr-table-thead"> 
     <tr class="dr-table-subheader rich-table-subheader "> 
      <th class="dr-table-subheadercell rich-table-subheadercell " 
       scope="col" id="formulario:tablaArticulos:j_id69header"> 
      <div id="formulario:tablaArticulos:j_id69header:sortDiv">Nombre</div> 
      </th> 
      <th class="dr-table-subheadercell rich-table-subheadercell " 
       scope="col" id="formulario:tablaArticulos:j_id71header"> 
      <div id="formulario:tablaArticulos:j_id71header:sortDiv">Nombre</div> 
      </th> 
      <th class="dr-table-subheadercell rich-table-subheadercell " 
       scope="col" id="formulario:tablaArticulos:j_id75header"> 
      <div id="formulario:tablaArticulos:j_id75header:sortDiv">Descripci&oacute;n</div> 
      </th> 
     </tr> 
    </thead> 
    <tbody id="formulario:tablaArticulos:tb"> 
     <tr class="dr-table-firstrow rich-table-firstrow "> 
      <td class="dr-table-cell rich-table-cell center " 
       id="formulario:tablaArticulos:0:j_id69"> 
      <table id="formulario:tablaArticulos:0:radioGroup1"> 
       <tr> 
        <td><input id="formulario:tablaArticulos:0:radioGroup1:0" 
         type="radio" name="formulario:tablaArticulos:0:radioGroup1" 
         value="1" onclick="updateSelected('hidRegTablaArticulos', '1');" 
         title="Seleccionar"><label 
         for="formulario:tablaArticulos:0:radioGroup1:0"></label></td> 
       </tr> 
      </table> 
      </td> 
      <td class="dr-table-cell rich-table-cell center " 
       id="formulario:tablaArticulos:0:j_id71">fff</td> 
      <td class="dr-table-cell rich-table-cell center " 
       id="formulario:tablaArticulos:0:j_id75">PRUEBA SDS</td> 
     </tr> 
     <tr class="dr-table-firstrow rich-table-firstrow "> 
      <td class="dr-table-cell rich-table-cell center " 
       id="formulario:tablaArticulos:1:j_id69"> 
      <table id="formulario:tablaArticulos:1:radioGroup1"> 
       <tr> 
        <td><input id="formulario:tablaArticulos:1:radioGroup1:0" 
         type="radio" name="formulario:tablaArticulos:1:radioGroup1" 
         value="1" onclick="updateSelected('hidRegTablaArticulos', '2');" 
         title="Seleccionar"><label 
         for="formulario:tablaArticulos:1:radioGroup1:0"></label></td> 
       </tr> 
      </table> 
      </td> 
      <td class="dr-table-cell rich-table-cell center " 
       id="formulario:tablaArticulos:1:j_id71">dd</td> 
      <td class="dr-table-cell rich-table-cell center " 
       id="formulario:tablaArticulos:1:j_id75">PRUEBA SDS</td> 
     </tr> 
    </tbody> 
</table> 
<script> 
          setRadioGroup('radioGroup1'); 
         </script></div> 
</div> 
<table id="formulario:botonera"> 
    <tbody> 
     <tr> 
      <td><input id="formulario:j_id80" name="formulario:j_id80" 
       onclick="A4J.AJAX.Submit('_viewRoot','formulario',event,{'parameters':{'formulario:j_id80':'formulario:j_id80'} ,'actionUrl':'/serequp/faces/administracion/articulosPv.jspx','similarityGroupingId':'formulario:j_id80'});return false;" 
       value="Grabar" type="button"></td> 
     </tr> 

    </tbody> 
</table> 
<input type="hidden" name="formulario" value="formulario"><input 
    type="hidden" name="autoScroll" value=""><input type="hidden" 
    name="formulario:j_idcl" value=""><input type="hidden" 
    name="formulario:_link_hidden_" value=""><script 
    type="text/javascript">function clear_formulario() { 
_clearJSFFormParameters('formulario','',['formulario:j_idcl','formulario:_link_hidden_']); 
} 
function clearFormHiddenParams_formulario(){clear_formulario();} 
function clearFormHiddenParams_formulario(){clear_formulario();} 
clear_formulario();</script><input type="hidden" name="javax.faces.ViewState" 
    value="!40dc077b"></form>* 
+0

¿Podrían presentar un poco más de contexto (página HTML)? –

Respuesta

6

finalmente conseguí la respuesta!

La solución viene de este blog, pero con alguna modificación (el blog, como muchos otros, resuelve el problema para crear un nuevo elemento, no para modificar uno existente).

El problema es que Internet Explorer no permite la modificación de algunos atributos durante el tiempo de ejecución. Uno de estos es el nombre del atributo. Como no se puede modificar, el comportamiento no es lo que estás esperando. La solución es crear un nuevo elemento, eliminar el anterior y reemplazarlo por uno nuevo.

Aquí la solución (trabajo con Firefox 3 e Internet Explorer 7):

<script> 
function setRadioGroup (name){ 
    var listaRadios = document.getElementsByTagName('input'); 
    var tam = listaRadios.length; 
    for (i = 0; i < tam; i++){ 
    cur = listaRadios[i]; 
    if (cur.type == 'radio'){ 
     try { 
     // if not IE, raise an error and go to catch.    
      element = document.createElement('<input onclick="alert(this.name + this.value);" type="radio" name="' + name + '" value="' + cur.value + '">'); 
      parentNode = cur.parentNode; 
      parentNode.insertBefore(element, cur); 
      parentNode.removeChild(cur); 
     } catch (err) { 
      cur.setAttribute('name', name); 
      cur.setAttribute('onclick', 'alert(this.name + this.value);'); 
     } 
    } 
    } 
} 
</script> 

<html> 
    <head> 
    <title>My Page</title> 
    </head> 
    <body onload="setRadioGroup('test')"> 
    <form name="myform" action="http://www.mydomain.com/myformhandler.cgi" method="POST"> 
     <div align="center"><br> 
     <input type="radio" value="Milk"> Milk<br> 
     <input type="radio" value="Butter" > Butter<br> 
     <input type="radio" value="Cheese"> Cheese 
     <hr> 
     <input type="radio" value="Water"> Water<br> 
     <input type="radio" value="Beer"> Beer<br> 
     <input type="radio" value="Wine" > Wine<br> 
     </div> 
    </form> 
    </body> 
</html> 
+0

Gracias, Jerome. Lo verificaré tan pronto como regrese al trabajo el próximo lunes y le contaré cómo funciona. :) – Averroes

+0

¿qué hacer para que funcione en ie6? –

Cuestiones relacionadas