2011-04-13 27 views
9

Realicé búsquedas en línea y no encontré un buen método para seleccionar el control de radiobuttonlist en .net Así que agrego una clase a cada lista de botones de radio y uso el selector de clase para recorrer cada uno, sin embargo, parece que cada vez que uno cambia, todo cambia. Ver el código de la siguiente manera: Esta es jQuery parte:Cómo recorrer una lista de botones de opción

function Checkform() { 
    result=true; 
    $('.rbl').each(function() { 
      var cc = $(this + "[checked]").val(); 
      if (cc == undefined) { 
       result = false; 
       return false; 
      } 
     }); 
     return result; 
    } 

Esto es parte de Internet:

<form id="form1" runat="server" onsubmit="return Checkform();"> 
<asp:RadioButtonList ID="RadioButtonList1" class="rbl" runat="server"> 
     <asp:ListItem>1</asp:ListItem> 
     <asp:ListItem>2</asp:ListItem> 
     <asp:ListItem>3</asp:ListItem> 
    </asp:RadioButtonList> 

    <asp:RadioButtonList ID="RadioButtonList2" class="rbl" runat="server" 
     RepeatDirection="Horizontal"> 
     <asp:ListItem>1</asp:ListItem> 
     <asp:ListItem>2</asp:ListItem> 
     <asp:ListItem>3</asp:ListItem> 
     <asp:ListItem>4</asp:ListItem> 
    </asp:RadioButtonList> 

Lo que quiero hacer es comprobar si todo el control RadioButtonList tiene su seleccionado valor antes de enviar el formulario. Pero funciona como si uno hubiera seleccionado el valor, la función devolverá true sin importar el clima, el otro ha seleccionado el valor. Por favor, ayúdame en este tema. Gracias de antemano.

Respuesta

12

¿Qué tal esto:

function Checkform() { 
    var result = true; 
    $('.rbl').each(function() { 
     var checked = $(this).find('input:radio:checked'); 
     if (checked.length == 0) { 
      result = false; 
      return; 
     } 
    }); 
    return result; 
} 

Este examinará cada grupo y determinar si hay una radiobuttom seleccionado dentro del grupo. La clave es $(this).find('..') que devuelve todos los botones de opción "marcados" dentro del grupo actual que es cero si no se selecciona ninguno, y 1 si se selecciona uno.

+1

¡Ahí lo tienes! ¡Lo hace! ¡Lo aprecio! –

1

Sí, su función será verdadera porque comienza suponiendo que su condición es "verdadera" primero. Cuando pasa por "RadioButtonList1" y encuentra un control que está seleccionado (que supongo que será uno por defecto), también devolverá verdadero.

Prueba el siguiente código:

var checkedRadioButtons = $('#form1 .rbl input:checked'); 

Esta línea solo se obtendrán los botones de opción cuyo valor está ajustado a comprobar. A continuación, puede iterar sobre los elementos para obtener más información, como su valor:

checkedRadioButtons.each(function(Index){ 
    return $(this).val(); 
}); 
+0

Creo que está haciendo algo en la línea de una validación de campo requerida donde tiene que seleccionar algo de cada lista. – R0MANARMY

+0

Sí, tienes razón, estoy haciendo una validación. –

+0

Entonces, ¿cómo asegurarse de que se haya seleccionado una de las dos opciones de radiobuttonlist? –

0

Esto validará que cada RadioButtonList tiene un elemento activado. Entonces, si hay 2 listas y 2 elementos marcados, entonces devuelve verdadero.

function Checkform() { 
    return $(".rbl :checked").length == $(".rbl:has(:radio)").length 
} 
+0

Desafortunadamente en este caso hay dos listas diferentes con la misma clase. Esto le dirá si alguno de ellos tiene algo seleccionado, no si ambos tienen algo seleccionado. – R0MANARMY

+0

Lo sé, pero no entendí que lo necesitara de la descripción. – Homer

+0

Actualicé el código. Ahora validará que todas las RadioButtonLists "rbl" tengan un elemento verificado. – Homer

0

Si entiendo su pregunta correctamente, debe asegurarse de que cada RadioButtonList tenga algo seleccionado antes de enviarlo. Hay un par de formas de lograr esto.

Parece que está utilizando WebForms, por lo que no necesita tocar jQuery, puede hacerlo con RequiredFieldValidator (uno para cada RadioButtonList) y ya está todo listo.

Si quiere seguir el camino jQuery, entonces es más fácil pensar en su pregunta como "¿Alguna RadioButtonLists NO tiene un elemento seleccionado?" Para responder a ella que:

  1. Seleccionar todos los botones de selección de la clase correspondiente

  2. Obtener una lista distinta de nombres (como así es como se agrupan los botones de radio). Existen many formas de lograr esto, algunas son más fáciles que otras.Puede utilizar la utilidad map para crear una lista de nombres (que luego se puede hacer distinta)

    var all = $.map( 
        $(".rbl input:radio"), 
        function(n, i){ return n.attr("name") } 
    ); 
    
  3. Seleccionar todos checked botones de radio con la clase apropiada (ya que es una lista de botones de radio, no se puede tener más de un checked elemento a la vez por lo que será único)

    var selected = $(".rbl input:radio:checked") 
    
  4. comparar las listas para ver si son del mismo tamaño. Si lo son, cada lista tiene un elemento seleccionado; si no lo están, al menos una lista no tiene ningún elemento seleccionado. También puede usar la utilidad de mapas para convertir esto en una lista de nombres, pero no es necesario, ya que solo compara longitudes de matriz.

Si también quiere saber lo que lista (s) de botón de radio no tiene un valor seleccionado, tendrá que aplicar la utilidad del mapa en la matriz desde el paso 3 y luego ver qué nombres son en all pero no en selected.

Cuestiones relacionadas