简体   繁体   English

更改单选按钮名称javascript在IE中不起作用

[英]Change radio button name javascript not working in IE

I have a few radiobuttons in a jsp page. 我在一个jsp页面中有几个单选按钮。 I run a javascript method once the page is loaded that seeks for certain radio buttons and change its name so they work like a radio group. 页面加载后,我将运行javascript方法,以查找某些单选按钮并更改其名称,以便它们像单选组一样工作。

I'm doing it this way because the radio buttons are inside jsf table and I have no access to the name property when coding and I want all of the radio buttons work like a radio group. 我这样做是因为单选按钮在jsf表中,并且在编码时我无法访问name属性,我希望所有单选按钮都像单选组一样工作。

Anyways the script run without problems and the radio buttons' names are changed properly. 无论如何,脚本都可以正常运行,并且单选按钮的名称已正确更改。

But while this works in FF 3 (the work like a radio group) it doesn't work in IE 6 or IE7 though they have the same 'name' property. 但是,尽管这在FF 3(类似于广播组)中起作用,但在IE 6或IE7中却没有作用,尽管它们具有相同的“名称”属性。 Does anyone know how can I solve this? 有谁知道我该怎么解决?

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: Added the code output of the webpage: 编辑:添加了网页的代码输出:

<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>*

I finally got the answer! 我终于得到答案了!

The solution come from this blog , but with some modification (the blog, as many others, solve the problem for create a new element, not to modify an existant one). 该解决方案来自此Blog ,但是进行了一些修改(与其他博客一样,该博客解决了创建新元素而不是修改现有元素的问题)。

The problem is that Internet Explorer does not allow some attributes modification during the run time. 问题是Internet Explorer不允许在运行时修改某些属性。 One of these is the attribute name. 其中之一是属性名称。 As it can not be modified, the behaviour is not what you're expecting. 由于无法修改,因此行为不是您所期望的。 The solution is to create a new element, remove the old one and replace it by the new one. 解决方案是创建一个新元素,删除旧元素,然后将其替换为新元素。

Here the solution (work with Firefox 3 and IE 7): 这里是解决方案(使用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>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM