Dynami c не делает условные заявления - PullRequest
0 голосов
/ 31 марта 2020

Итак, у меня есть этот выпадающий список, который динамически получает данные из базы данных, и вот как я получаю информацию:

function buscarHist(fgshgdjhgfgffjtfj){

    $('.divHist').show();
    $('#down').html('');
    $.getJSON("./php/obtenerDatos.php",{IDA:fgshgdjhgfgffjtfj}, function(data){
    var enca =  Object.keys(data[0]);
    // console.log(enca);
      $.each(enca,function(i,item){
        console.log(enca);
       // $('#catalogos').append(item)
        $('#down').append('<option value ="' + data[0][item] + '" > '+ item +' </option>')

       // console.log(item)
      });    
    });

Внутри ./php/obtenerDatos.php это фрагмент кода

<?php
session_start();
include('../../includes/dbconnect.php');
$Q = new Util();
$BD = new Util();
$BUSQUEDA = array();
$ESC = isset($_SESSION['ESCUELA']) ? $_SESSION['ESCUELA'] : "";
$USR = isset($_SESSION['login_user']) ? $_SESSION['login_user'] : "";

$contentType = isset($_SERVER["CONTENT_TYPE"]) ? trim($_SERVER["CONTENT_TYPE"]) : '';
if($contentType === "application/json") {
  $content = trim(file_get_contents("php://input"));
  $PARAMS = json_decode($content, FALSE);

  if(is_object($PARAMS)) {
  }
}else{
 // $OPC = isset($_GET['OPC']) ? $_GET['OPC'] ;

//  if($OPC == "1"){
    $ID_USR = $_GET['IDA'];

    $Q = $BD->consulta("

    SELECT * FROM DATOS_BASICOS WHERE ID_USR = '$ID_USR'
");

   // $Q = $BD->consulta("CALL SP_SMS_ALUMNOS(1, '$CURP');");
    while($O = mysqli_fetch_object($Q)){
     array_push($BUSQUEDA, $O);
    }
    ECHO json_encode($BUSQUEDA,JSON_UNESCAPED_UNICODE);
    if($BD->con->error != '')ECHO $BD->con->error;
 // }

}

Все работает нормально, но я должен добавить какой-то список в другой зависимый выпадающий список, и я использую операторы switch, которые не работают

это мой код, и по некоторым причинам он не вносит никаких изменений, это мой желаемый результат, но, очевидно, я не буду использовать жестко закодированный параметр внутри значения и меток, это то, что я получаю из базы данных

$(document).ready(function() {
  var AFIRMACIONES = [{
      display: "NO",
      value: "0"
    },
    {
      display: "SI",
      value: "1"
    }
  ];

  var AFIRMACIONES2 = [{
      display: "SI",
      value: "1"
    },
    {
      display: "NO",
      value: "0"
    }
  ];

  var AFIRMACIONES3 = [{
      display: "CASADO",
      value: "1"
    },
    {
      display: "SOLTERO",
      value: "2"
    },
    {
      display: "VIUDO",
      value: "3"
    }
  ];

  // $(document).ready(function() {
  getSelectData($("#down"));
  $('#txtnombre').val($('#child_selection').children(':selected').text())
  // });

  $("#down").change(function() {
    getSelectData($(this));
  });

  function getSelectData(el) {
    console.clear();
    var $option = el.find("option:selected");
    var text = $option.text();
    console.log(text);

    switch (text) {
      case "PESO":
        list(AFIRMACIONES);
        break;
      case "ZURDO":
        list(AFIRMACIONES2);
        break;
      case "EDO_CIVIL":
        list(AFIRMACIONES3);
        break;

      default:
        $("#child_selection").html("");
        break;
    }
  }

  function list(array_list) {
    console.log(array_list);
    $("#child_selection").html("");
    $(array_list).each(function(i) {
      $("#child_selection").append(
        '<option value="' + array_list[i].value + '">' + array_list[i].display + "</option>"
      );
    });
    $('#txtnombre').val($('#child_selection').children(':selected').text())
  }

  $('#child_selection').change(function() {
    $('#txtnombre').val($(this).children(':selected').text())

    //$("#txtnombre").hide();

    // }

  })
});



This is an example of the desired result but it seems its only working when I put the values and labels on my dropdown and as I said I must return this info from my database .. do am i missing something?
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select id="down">
  <option value="1">PESO</option>
  <option value="2">ZURDO</option>
  <option value="3">EDO_CIVIL</option>
</select>

<select name="child_selection" id="child_selection">
</select>

<input id="txtnombre" type="text" class="form-control autofocus form-control-round F1" placeholder="SIN INFORMACION" />
<input id="txtnombre2" type="text" style="visibility:hidden" class="form-control autofocus form-control-round F1" placeholder="SIN INFORMACION" />

Это мой HTML реальный код, обратите внимание, что приведенный выше фрагмент приведен только как ССЫЛКА, потому что там я не использую никакую базу данных

  </div>
                <div class="card-block">
                    <div class="table-responsive">
                        <table class="table table-responsive-sm table-striped table-xs table-hover">
                            <thead>
                            </thead>                                    
                         <select name="down" id="down"  > 

                         </select>
                     <select name="child_selection" id="child_selection">
                          </select>

                         <input id="txtnombre" type="text" class="form-control autofocus form-control-round F1" placeholder="SIN INFORMACION"/>
                         <input id="txtnombre2" type="text"  style="visibility:hidden" class="form-control autofocus form-control-round F1" placeholder="SIN INFORMACION"/>
                           </script>

                        <div class="col-sm-4">
                                <button id="btnGuardar" class="btn waves-effect waves-light btn-primary btn-block"><i class="ti ti-save"></i> Guardar</button>
                            </div>

                        </table>
                    </div>
                </div>
            </div>

а это мой JS ФАЙЛ:

$('#down').change(function(){
 //$('#txtnombre').val($(this).val()) 
 $('#txtnombre').val($(this).val());
// var mivalor = $('#txtnombre').val() 

})
}

$(document).ready(function() {

  var AFIRMACIONES = [
    {display: "NO", value: "0" }, 
    {display: "SI", value: "1" }

  ];

  var AFIRMACIONES2 = [
    {display: "SI", value: "1" }, 
    {display: "NO", value: "0" }
   ];

   var AFIRMACIONES3 = [
    {display: "SOLTERO(A)", value: "1" }, 
    {display: "CASADO", value: "2" },
    {display: "UNION LIBRE", value: "3" },
   ];

  // $(document).ready(function() {
  getSelectData($("#down2"));
  // });

  $("#down2").change(function() {
    getSelectData($(this));
  });

  function getSelectData(el) {
    console.clear();
    var $option = el.find("option:selected");
    var text = $option.text();
    console.log(text);
    switch (text) {
      case "PESO":
        list(AFIRMACIONES);
        break;
      case "ZURDO":
        list(AFIRMACIONES2);
        break;

        case "EDO_CIVIL":
          list(AFIRMACIONES3);
          break;
      default:
        $("#child_selection").html("");
        break;
    }

  }

  function list(array_list) {

    $("#child_selection").html("");
    $(array_list).each(function(i) {
      $("#child_selection").append(
        '<option value="' + array_list[i].value + '">' + array_list[i].display + "</option>"
      );
    });
  }
});


$(function() {
  var 
  jqDdl = $('#down'),
  onChange = function(event) {
      if ($(this).val() === '1') {
          $('#txtnombre').hide();
          $('#txtnombre').focus().select();
      }       
      else if ($(this).val() === '0') {
        $('#txtnombre').hide();
        $('#txtnombre').focus().select();
      }

      else {
          $('#txtnombre').show();
      }
  };
  onChange.apply(jqDdl.get(0)); 
  jqDdl.change(onChange);
});

1 Ответ

0 голосов
/ 31 марта 2020

Синтаксис $(array_list).each(function(i) ...) используется, когда array_list является селектором jQuery. Но array_list - это массив объектов, а не селектор. Правильный синтаксис для итерации по массиву: $.each(array_list, function(i) ...).

Кроме того, вторым аргументом функции итерации является элемент массива, поэтому вместо ссылки на array_list[i] в обратном вызове вы можете добавить еще один параметр и использовать это. И jQuery также устанавливает this для элемента, так что вы можете использовать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...