Cómo cambiar un div en base a la selección del tipo de radio?
-
21-08-2019 - |
Pregunta
i Mueva un div usando algo como esto -
<input type="radio" name="myRadio" value="myDiv_1" />MyDiv
<input type="radio" name="myRadio" value="myDiv_2" />MyDiv2
<input type="radio" name="myRadio" value="myDiv_3" />MyDiv3
<div id="myDiv_1"> 1 Some input fields, text </div>
<div id="myDiv_2"> 2 More input fields, text </div>
<div id="myDiv_3"> 3 More input fields, text </div>
JAVASCRIPT
$('#myDiv_1').hide();
$('#myDiv_2').hide();
$('#myDiv_3').hide();
$('input[name="myRadio"]').change(function() {
var selected_type = $(this).val();
switch(selected_type) {
case "myDiv_1":
$('#myDiv_1').slideDown();
//if others are visible just slideup
$('#myDiv_2').slideUp();
$('#myDiv_3').slideUp();
break;
case "myDiv_2":
$('#myDiv_2').slideDown();
//if others are visible just slideup
$('#myDiv_1').slideUp();
$('#myDiv_3').slideUp();
break;
case "myDiv_3":
$('#myDiv_3').slideDown();
//if others are visible just slideup
$('#myDiv_2').slideUp();
$('#myDiv_1').slideUp();
break;
}
}
);
Esto funciona bien. Mi pregunta es cómo puedo mejorarlo y hacerlo más flexible, como si tengo que MÁS divs tengo que modificar todos los casos de interruptor.
También debe incluir la funcionalidad del interruptor en una función y se unen esta función para eventos tales como hacer clic y el cambio (sólo para garantizar que las obras comunicación alternativa) ??
Gracias por su ayuda.
Solución
Esto funciona, yo sólo probé.
<script type="text/javascript">
$(document).ready(function(){
$('.MyDiv').hide();
$('input[name="myRadio"]').change(function(){
var selected = $(this).val();
$('.MyDiv').slideUp();
$('#'+selected).slideDown();
});
});
</script>
Los botones de radio deben tener este aspecto, donde el value
es el id
del elemento que se debe mostrar.
<form action="example.com" method="post">
<input type="radio" name="myRadio" value="myDiv_1" />MyDiv<br />
<input type="radio" name="myRadio" value="myDiv_2" />MyDiv2<br />
<input type="radio" name="myRadio" value="myDiv_3" />MyDiv3<br />
<input type="radio" name="myRadio" value="myDiv_4" />MyDiv4
</form>
Y, por último, los div
s deben tener este aspecto, todos ellos con la clase MyDiv
:
<div id="myDiv_1" class="MyDiv">Div number 1!</div>
<div id="myDiv_2" class="MyDiv">Div number 2!</div>
<div id="myDiv_3" class="MyDiv">Div number 3!</div>
<div id="myDiv_4" class="myDiv">Div number 4!</div>
Otros consejos
El siguiente se basa en el código que ha pegado aquí - Antes de usar, lea a continuación:
$("div").hide();
$("input[name='myRadio']").change(function(){
$("div:not(#"+$(this).val()+")").slideUp();
$("div#"+$(this).val()).slideDown();
});
Antes de usar ...
Yo sugeriría agregar una clase a cada uno de los paneles colapsables, tal vez .panel. Y luego actualizar los selectores para modificar sólo div.panel en lugar de cada div en la página.
su solución no funciona en IE 8-- en realidad tiene el comportamiento opuesto. Utilizar la función de "clic" en lugar de "cambio"
$('.myDiv').hide();
$('input[name="myRadio"]').click(function(){
var selected = $(this).val();
$('.myDiv').slideUp();
$('#'+selected).slideDown();
});