0

Podrían ayudarme con el siguiente inconveniente que tengo:

Resulta que tengo un formulario hecho en PHP con una encuesta, dichas preguntas de la preguntas están almacenadas de la base de datos, estas preguntas tienen como opción de respuesta un Radiobutton (opciones) con tipo de respuesta Y ó N, hasta ahí todo bien.

Mi inquietud es: como capturar el valor de cada una de esas preguntas de forma dinámica, es decir que al dar click en aceptar me recoja el valor de cada una de las preguntas para ser enviadas a PHP.

Este es mi código JQuery:

$(document).on('submit', '#form_Checklist', function(event){
    event.preventDefault();
    var option=$('input[type="radio"]:checked').val();
    $.ajax({
        url:"?view=Reffers&mode=guardaCheck",
        method:"POST",
        data:{option:option},
        success:function(data){
            alert(data);
        }
    });
});

Código PHP con que genero el bloque de preguntas:

while ($row = $db->recorrer($result)){
    $html .= '<tr>
              <td>'.ucwords($row['DESCRIPCION']).'</td>';
    for($i=1;$i<=2;$i++){
        $html .= '<td><label><input type="radio"  value="'.$valor.'" name="opt'.$row['ID'].'"> '.$rta.' </label></td>';
        $rta = "NO";
        $valor = "0";
    }
    $cont++;
    $rta = "SI";
    $valor = "1";
    $html .= '</tr>';
}

Aquí intento capturar los valores:

if ($_POST) {
   echo 'HOLA: '.$_POST['option'];
} 

introducir la descripción de la imagen aquí

Israel-ICM
  • 3,258
  • 17
  • 15
  • 25
  • Eso es lo que haces aquí: `var option=$('input[type="radio"]:checked').val();`. ¿O son varios radio con diferentes `name`? – A. Cedano Nov 09 '20 at 16:08
  • Son varios radio, ya son preguntas diferentes preguntas, lo coloque asi ya que no se como capturar varios radio con diferentes nombres en un solo evento – Gabriel Nemesio Duran Gomez Nov 09 '20 at 16:19
  • Les puedes dar a todos los radios la misma `class`, y luego recoger los valores de los seleccionados dentro de un `each`, guardándolos en un array y luego pasas ese array al servidor. – A. Cedano Nov 09 '20 at 16:20
  • Amigo gracias por tu valiosa colaboración, tendrás algún código ejemplo de como recoger los valores con un each??? – Gabriel Nemesio Duran Gomez Nov 09 '20 at 16:33
  • [Aquí hay un ejemplo parecido a lo que quieres](https://es.stackoverflow.com/a/327576/29967). Allí los radio están dentro de un `div` que tiene la clases `questions`, el código verifica los que tengan la clase `correcto` para ir sumando a un acumulador. Si varías un poco el código podrías meter en un array los seleccionados. Inténtalo y si tienes algún problema indícalo en la pregunta pulsando en [edit]. Esta pregunta va más del código Javascript que del código PHP. Convendria que pongas el HTML donde están tus radi . – A. Cedano Nov 09 '20 at 17:03

1 Answers1

0

En este trozo de código se muestra cómo recoger los radio seleccionados.

La lógica seguida aquí ha sido:

  1. Poner todos los radio dentro de un div con la clase questions
  2. Usar un selector que determine, dentro de un each, qué radios dentro de ese div están chequeados
  3. Ir guardando los name y los value de esos radio dentro del array allChecked. Si sólo te interesan los value, puedes meterlos directamente, teniendo una lista de valores (en este caso, podrías usar el índice del array para saber a qué pregunta correspondería cada value). Este punto 3 depende ya de lo que quieras hacer en el servidor.

Adaptándolo a tu contexto, debería funcionar. Si tienes alguna duda o problema, dilo en comentarios.

$(function() {
  /* Arreglo para guardar todos los seleccionados */
  var allChecked = [];
  $("#comprobar").click(function() {
    /* Aquí alcanzamos todos los radio chequeados dentro del div */
    $('.questions input:checked').each(function() {
      /* 
         Creamos un objeto para crear un par name : value
         esto puede convenir o no, depende de lo que quieras
         hacer en el servidor. Si sólo te interesan los valores
         en vez de esto harías un allChecked.push(this.value)
      */
      var obj = {};
      obj[this.name] = this.value;
      allChecked.push(obj);
    });
    /* Esto es lo que mandarás al servidor vía Ajax */
    console.log(allChecked);
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="questions">
  <p>1. ¿De qué color es el caballo blanco de Napoleón? </p>
  <input type="radio" class="correcto" value="a" name="q1">Blanco<br/>
  <input type="radio" class="incorrecto" value="b" name="q1">Negro<br/>
  <p>2. ¿En qué año murió CarloMagno? </p>
  <input type="radio" class="incorrecto" value="a" name="q2">En el último<br/>
  <input type="radio" class="correcto" value="b" name="q2">En el 814 dC<br/>
</div>

<hr />
<input type="button" value="Enviar" id="comprobar">
A. Cedano
  • 86,578
  • 19
  • 122
  • 221