Crear un cuestionario de forma dinamica en Javascript

necesito crear un formulario dinámico que agregue nuevas preguntas y luego permita agregar respuestas a cada una de esas preguntas. Actualmente este es el código que tengo en funcionamiento, con el cual logro agregar y eliminar respuestas correctamente, pero, lo que no he podido lograr aún es agregar nuevas preguntas para luego agregar respuestas específicamente a las preguntas que uno desee.

Un ejemplo del problema es: Tengo 2 preguntas y deseo agregar nuevas respuestas sólo a la pregunta 2. Lo que sucede es que las nuevas respuestas que agrego pasan a formar parte de la pregunta 1 siempre (no de la pregunta 2 como deseo).

Vista.html

<form action="">   <div class="form-group row">   <div class="col-md-8 offset-md-2">      <input type="text" name="encuesta" id="encuesta" placeholder="Nombre           encuesta" class="form-control">   </div>   </div>   <div id="contenedor_todo">   <div id="pr_0">      <div class="form-group row">         <div class="col-md-8 offset-md-2">            <input type="text" name="preguntas" id="preguntas"              placeholder="Pregunta" class="form-control">         </div>      </div>   </div>   <div id="contenedor_respuestas">      <div class="tr_0">         <div class="form-group row">            <div class="col-md-6 offset-md-2">               <input type="text" name="respuestas" id="respuestas"                 class="form-control" placeholder="Respuestas">            </div>            <div class="col-md-2">               <button class="btn btn-light" type="button"                onclick="agregarCampo();"><i class="fas fa-plus-                circle"></i></button>               <button class="btn btn-light" type="button"                onclick="quitarCampo();"><i class="fas fa-minus-                circle"></i></button>             </div>         </div>      </div>   </div>   </div>   <div class="input-group-prepend text-center offset-lg-5">   <button class="btn btn-light" type="button"    onclick="agregarCampoP()">Agregar pregunta</button>   <button class="btn btn-light" type="button" onclick="">Quitar    pregunta</button>    </div>   </form> 

funcion.js

var campos = 0; var campos2 = 0;  //agregar respuestas function agregarCampo() {  //Limita a generar 5 respuestas max. if (campos < 4) {     campos = campos + 1;      var NvoCampo = document.createElement("div");     NvoCampo.id = "tr_" + (campos);     NvoCampo.innerHTML =       '<div class="form-group row">' +         ' <div class="col-md-6 offset-md-2">' +         '<input type="text"  name="respuestas'+ campos+'" class="form-       control"  id="respuestas'+ campos+'" placeholder="Otra respuesta">' +     '</div>'+         '</div>';        var contenedor = document.getElementById("contenedor_respuestas");      contenedor.appendChild(NvoCampo);  } }  //quitar respuestas function quitarCampo(textbox) {   if (campos > 0) {      var eliminar = document.getElementById("tr_" + campos);     var contenedor = document.getElementById("contenedor_respuestas");      contenedor.removeChild(eliminar);     campos = campos - 1;   } }  //agregar preguntas nuevas function agregarCampoP() {  //Limita a generar 5 preguntas max if (campos2 < 4) {     campos2 = campos2 + 1;      var NvoCampo2 = document.createElement("div");     NvoCampo2.id = "pr_" + (campos2);     NvoCampo2.innerHTML =      '<div class="form-group row">' +         ' <div class="col-md-6 offset-md-2">' +         '<input type="text" name="preguntas'+ campos2+'" id="preguntas'+      campos2+'" placeholder="Pregunta" class="form-control">' +     '</div>'+         '</div>'+         '<div class="form-group row">'+          '<div class="col-md-6 offset-md-2">'+         '<input type="text" name="respuestas" id="respuestas" class="form-           control" placeholder="Respuestas">'+          '</div>'+         '<div class="col-md-2">'+               '<button class="btn btn-light" type="button"                 onclick="JavaScript:agregarCampo();"><i class="fas fa-plus-                 circle"></i></button>'+               '<button class="btn btn-light" type="button"                 onclick="JavaScript:quitarCampo();"><i class="fas fa-minus-            circle"></i></button>'+         '</div>'+         '</div>';      var contenedor2 = document.getElementById("contenedor_todo");      contenedor2.appendChild(NvoCampo2); } 

Cual es la forma correcta de usar la directiva @include de Blade (Laravel)?

Estoy intentando hacer un layout general y vistas parciales para incluirlas con la directiva include, pero apenas uso la primera @include(‘includes.sidebar’) tengo error 500 en mi pagina (ni idea de a que se debe). Hace un momento funcionó pero me incluía el contenido externo repitiendolo como si estuviera en un bucle. Se repetía una y otra vez pero no tengo ningún bucle. Pareciera ser culpa de la directiva porque cuando la quito todo se ve bien. Dejare fragmentos de código para que me ayuden porfa, Agradecida. 🙂

<div class="row">          <div class="col-sm-4" style="background: #001b01">                        @include('includes.sidebar')           </div>           <div class="col-sm-8">               <!--  @directive1  directiva personalizada. Se definen ejecutando un comando en la terminal, creando un Service provider, defines el metodo, lo registras en el archivo general de service Providers y antes de usarlo ejecuta php artisan view:clear. Luego usalo asi como aqui.          Igual te dejo un tutorial en este sistema -->            @yield('content')           </div>                  </div>

¿Como puedo saber cual es la forma correcta de utilizar el contenedor para el inyector de dependencias?

Estoy utilizando Symfony2 y cada vez que quiero usar el contenedor del inyector de dependencias tengo que probar una de estas tres formas dependiendo de si estoy en un comando, en un servicio o en un controlador.

¿Hay alguna forma de unificarlo? ¿Por que ocurre esto? ¿como puedo tener siempre accesible el contenedor?

$  prs = $  this->get('rickapp.propiedades'); $  prs = $  this->container->get('rickapp.propiedades'); $  prs = $  this->getContainer()->get('rickapp.propiedades'); 

Agradecería que me redirijáis a documentación en Español. Gracias:)

¿Como obtener el texto plano de una cadena HTML de forma segura?

Necesito obtener el texto que se encuentra dentro de una cadena HTML la cual puede contener código malicioso, por lo cual necesito que el método no ejecute scripts, descargue recursos externos, etc.

Ejemplo de HTML:

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <style type="text/css" style="display:none;"> P {margin-top: 0;margin-bottom: 0;}</style> <script>alert('Cuidado script!')</script> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"> <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> </head> <body dir="ltr">   <div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">     Buenos días Señor X.</div>   <div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">     Muchas gracias por el envió.</div>   <div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">     Cordialmente</div>   <div style="font-family:Calibri,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">     Sr Y&nbsp;</div>   <div id="DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2"><br>     <table style="border-top: 1px solid #D3D4DE;">       <tbody>         <tr>           <td style="width: 55px; padding-top: 18px;">             <a href="https://www.avast.com/sig-email?utm_medium=email&amp;utm_source=link&amp;utm_campaign=sig-email&amp;utm_content=webmail" target="_blank"><img onload="alert('Cuidado imagen!')" onerror="alert('Cuidado error!')" alt="" width="46" height="29" style="width: 46px; height: 29px;" src="https://ipmcdn.avast.com/images/icons/icon-envelope-tick-round-orange-animated-no-repeat-v1.gif"></a>           </td>           <td style="width: 470px; padding-top: 17px; color: #41424e; font-size: 13px; font-family: Arial, Helvetica, sans-serif; line-height: 18px;">             Libre de virus. <a href="https://www.avast.com/sig-email?utm_medium=email&amp;utm_source=link&amp;utm_campaign=sig-email&amp;utm_content=webmail" target="_blank" style="color: #4453ea;"> www.avast.com</a> </td>         </tr>       </tbody>     </table>     <a href="#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2" width="1" height="1"></a>   </div> </body> </html>

Resultado esperado:

  • No se debe ejecutar ningún script
  • No se deben descargar recurso externo (imágenes, estilos, etc)
  • El resultado debe ser el texto:

    Buenos días Señor X. Muchas gracias por el envió. Cordialmente Sr Y Libre de virus. www.avast.com 

¿Por qué la base de datos me guarda las “ñ” de una forma extraña a través de un javascript?

Hace días he tenido problemas con la letra “ñ” al momento de guardar y listar, las letra se guardan bien y se muestra bien dentro del php y html, pero cuando reviso la base datos se muestra así: introducir la descripción de la imagen aquí

Esto se hace desde un javascript que es una table desplegable según el numero que se digite, osea sin digita 2 el javascript despliega 2 filas, etc.

código javascript:

var contLin = 1;  function agregar() {      var tr, td;     var con=0; while(con<document.getElementById('numer').value){      tr = document.all.tabla.insertRow();      td = tr.insertCell();     td.innerHTML = "<input type='text'  id='fts_nombre' name='fts_nombre[]'  onkeypress='return event.charCode != 39' >";     td = tr.insertCell();     td.innerHTML = "<input type='text' id='fts_apellido' name='fts_apellido[]' onkeypress='return event.charCode != 39' >";     td = tr.insertCell();     td.innerHTML = "<input type='text' id='fts_parentezco' name='fts_parentezco[]' onkeypress='return event.charCode != 39' >";     td = tr.insertCell();     td.innerHTML = "<input type='text' id='fts_edad' name='fts_edad[]'  onkeypress='return event.charCode != 39' >";     td = tr.insertCell();     td.innerHTML = "<input type='text' id='fts_escolaridad' name='fts_escolaridad[]' onkeypress='return event.charCode != 39' >";     td = tr.insertCell();     td.innerHTML = "<input type='text' id='fts_ocupacion' name='fts_ocupacion[]' onkeypress='return event.charCode != 39'>";      td = tr.insertCell();     td.innerHTML = "<input type='text' id='fts_vive' name='fts_vive[]' onkeypress='return event.charCode != 39'  >";      contLin++; con++; }  }   function borrarUltima() {     ultima = document.all.tabla.rows.length - 1;     document.all.tabla.deleteRow(ultima);     contLin--; }  function MAS(){ document.getElementById('pariente').style.display='block'; } 

introducir la descripción de la imagen aquí

¿Mejor forma de consumir un API rest en Android Studio?

Estoy desarrollando una aplicación en Java, para android, que permite consumir un Api rest remota. El api está desarrollada en Nodejs y muestra los datos desde SqlServer. Son aproximadamente 5000 registros los que están cargado actualmente en el Web server.

Estoy mirando la libreria de Volley, pero me dice que puede presentar problemas al momento de leer una gran cantidad de datos. ¿Cúal sería la forma de consumir datos desde este Api? Solo tengo que realizar el GET y el POST y mostrar los datos obtenidos en pantalla.

¿Existe una forma posible de usar el case del switch como “case (rango de números)”?

¡Buenas tardes! La forma en que lo digité en el título es obviamente errónea, pero es para que entiendan a lo que me refiero. Normalmente un switch case 1, el case siempre obedece a un entero, pero qué pasa si quiero un case que lea un rango de enteros posibles dentro de la variable del switch, por ejemplo

switch(edad())      case (edad()>=1)  

Aquí un ejemplo en código fácil de lo que me refiero.

switch(edadGato())     {     case 1:         cout<<"Al gato le corresponde la vacuna de la Rabia";         break;     case 3:         cout<<"Al gato le corresponde la vacuna de la Panleucopenia";         break;     default:         cout<<"Basado en la edad, al gato no le corresponde ninguna edad";         break;     } 

Si la edad fuese 2, no me detectaría que ya tendría una vacuna pendiente por tener más de un año (case 1), por eso, mi duda sobre si existe una forma algo como case (rango de números).

Nota: Sé que con if es más fácil, pero si en switch es posible, compártanlo conmigo. Gracias de antemano.

Cual crees que es la mejor forma de hacer un Splash, a mi me esta costando

Tengo unas dudas de como desarrollar correctamente que pasen datos de un Splash hacia el MainActivity. Estoy utilizando las librerías OkHttp y Gson, por que los datos recibidos es un JSON. Ademas no se si seria lo mas correcto de que la tarea sea Asíncrona, para que trabaje en segundo plano y cargue los datos. Pero no estoy seguro si lo estoy haciendo bien. Ya que la idea es tener un Botón en el Splash y que cuando pulsen cargue los datos del JSON mientras que se muestra una barra de precarga/preloader, hasta que se hayan cargado los datos correctamente y pase a la segunda actividad con los datos Json.

Splash

public class Splash extends AppCompatActivity {  public Button btnEntrar; public LottieAnimationView animation_view; public String URL = "https://www.midominio.com/questions.json";  @Override protected void onCreate(@Nullable Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.splash_activity);      btnEntrar = findViewById(R.id.btnEntrar);     animation_view = findViewById(R.id.animation_view);      btnEntrar.setOnClickListener(new View.OnClickListener() {         @Override         public void onClick(View v) {             animation_view.setVisibility(View.VISIBLE);             btnEntrar.setVisibility(View.INVISIBLE);             AsynchronousObtenJSON();         }     });  }   public void AsynchronousObtenJSON(){     OkHttpClient client = new OkHttpClient();     Request request = new Request.Builder()             .url(URL)             .build();     Call call = client.newCall(request);     call.enqueue(new Callback() {         @Override         public void onFailure(Call call, IOException e) {             Log.d("Mensaje", "Peta la conexion con el JSON");         }          @Override         public void onResponse(Call call, Response response) throws IOException {             String json = response.body().string();             String idiomaDisp = Locale.getDefault().getLanguage(); //Identificamos el Idioma del Dispositivo             Gson gson = new Gson();             final Base base = gson.fromJson(json, Base.class);             Intent intent = new Intent(Splash.this, MainActivity.class);             intent.putExtra("base", base);             startActivity(intent);             finish();         }     }); } 

MainActivity

public class MainActivity extends AppCompatActivity {  public Base in;  @Override protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.activity_main);      in = (Base) getIntent().getSerializableExtra("datos");   }