2009-04-24 53 views
5

我在jsp頁面中有幾個單選按鈕。一旦頁面加載後,我運行一個JavaScript方法,尋找某些單選按鈕並更改它的名稱,使它們像收音機組一樣工作。更改單選按鈕名稱javascript在IE中不工作

我這樣做是因爲單選按鈕位於jsf表格內,編碼時我無法訪問name屬性,我希望所有單選按鈕都像收音機組一樣工作。

不管怎樣,腳本運行沒有問題,單選按鈕的名稱已正確更改。

雖然這在FF 3(像收音機組那樣工作)中工作,但它在IE 6或IE7中不起作用,雖然它們具有相同的「名稱」屬性。有誰知道我該如何解決這個問題?

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; 
     } 
    } 
} 

編輯:添加網頁的代碼輸出:

<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

你能否提供一些更多的內容(HTML頁面)? – 2009-04-24 09:49:18

回答

6

我終於得到了答案!

解決方案來自blog,但經過一些修改(博客,和其他許多人一樣,解決了創建新元素的問題,而不是修改存在的問題)。

問題是Internet Explorer在運行時不允許修改某些屬性。其中之一是屬性名稱。由於它不能被修改,行爲不是你所期待的。解決方案是創建一個新元素,刪除舊元素並將其替換爲新元素。

這裏的解決方案(與Firefox 3和IE 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

謝謝,傑羅姆。我會在星期一再回去工作並且告訴你它是如何工作的時候檢查它。 :) – Averroes 2009-04-24 22:05:29