solo seleccionar marcar llenar habilitar formulario despues desmarcar deshabilitar con botones boton javascript html radio-button

javascript - seleccionar - ¿Cómo puedo habilitar los botones de radio desactivados?



marcar y desmarcar checkbox jquery (3)

¿Por qué no agarras una de las bibliotecas de scripts de AJAX, abstraen mucho de la magia negra de secuencias de comandos DOM de navegador cruzado y hacen la vida muchísimo más fácil.

El siguiente código funciona muy bien en IE, pero no en FF o Safari. No puedo entender por qué. Se supone que el código desactiva los botones de opción si selecciona la opción "Desactivar 2 botones de opción". Debería habilitar los botones de opción si selecciona la opción "Habilitar ambos botones de opción". Ambos funcionan ...

Sin embargo, si no usa el mouse para moverse entre las 2 opciones ("Habilitar ..." y "Desactivar ..."), los botones de opción no aparecen deshabilitados o habilitados correctamente, hasta que haga clic en cualquier otro lugar en la página (no en los propios botones de radio).

Si alguien tiene tiempo / siente curiosidad / se siente útil, pegue el código siguiente en una página html y cárguelo en un navegador. Funciona muy bien en IE, pero el problema se manifiesta en FF (3 en mi caso) y Safari, todo en Windows XP.

<html> <head> <script language="javascript"> function SetLocationOptions() { var frmTemp = document.frm; var selTemp = frmTemp.user; if(selTemp.selectedIndex >= 0) { var myOpt = selTemp.options[selTemp.selectedIndex]; if(myOpt.attributes[0].nodeValue == ''1'') { frmTemp.transfer_to[0].disabled = true; frmTemp.transfer_to[1].disabled = true; frmTemp.transfer_to[2].checked = true; } else { frmTemp.transfer_to[0].disabled = false; frmTemp.transfer_to[1].disabled = false; } } } </script> </head> <body> <form name="frm" action="coopfunds_transfer_request.asp" method="post"> <select name="user" onchange="javascript: SetLocationOptions()"> <option value="" />Choose One <option value="58" user_is_tsm="0" />Enable both radio buttons <option value="157" user_is_tsm="1" />Disable 2 radio buttons </select> <br /><br /> <input type="radio" name="transfer_to" value="fund_amount1" />Premium&nbsp;&nbsp;&nbsp; <input type="radio" name="transfer_to" value="fund_amount2" />Other&nbsp;&nbsp;&nbsp; <input type="radio" name="transfer_to" value="both" CHECKED />Both <br /><br /> <input type="button" class="buttonStyle" value="Submit Request" /> </form> </body> </html>


Bueno, IE tiene un modelo de objetos algo no estándar; lo que estás haciendo no debería funcionar, pero te estás saliendo con la tuya porque IE es amable contigo. En Firefox y Safari, document.frm en su código se evalúa como indefinido.

Debe usar valores de identificación en los elementos de su formulario y usar document.getElementById(''whatever'') para devolver una referencia a ellos en lugar de referirse a las propiedades inexistentes del objeto del documento.

Así que esto funciona un poco mejor y puede hacer lo que está buscando:

Line 27: <form name="frm" id="f" ... Line 6: var frmTemp = document.getElementById(''f'');

Pero es posible que desee consultar este excelente libro si desea obtener más información sobre la forma correcta de hacer las cosas: DOM Scripting by Jeremy Keith

Además, mientras hablamos sobre el tema, Bulletproof Ajax del mismo autor también merece un lugar en su estantería, como es JavaScript: The Good Parts, de Doug Crockford.


Para que FF imite el comportamiento de IE al usar el teclado, puede usar el evento de teclado en el cuadro de selección. En su ejemplo (no soy partidario de adjuntar manejadores de eventos de esta manera, pero ese es otro tema), sería así:

<select name="user" id="selUser" onchange="javascript:SetLocationOptions()" onkeyup="javascript:SetLocationOptions()">