Автоматическая обработка DOM


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

<script type="text/javascript">
  $(document).ready(function(){
    ramos_detalles();
  $("#ProvinciaBien").change(function(){cantones_pronvincias();});
  $("#CantonBien").change(function(){parroquias_cantones();});
});
//
function ramos_detalles(){
var code = '<?php echo $negocios['idRamo']; ?>';
var code2 = '<?php echo ($negocios['bolItem'] == 1) ? 1 : 0; ?>';
var vigencia = '<?php echo $negocios['bolVigencia']; ?>';
//
$.get("scripts/catalogos_detalles.php", { code: code, code2: code2 },
  function(resultado){
    if(resultado != false){
      document.getElementById("Bien").disabled = true;
      if(vigencia == 0){
        document.getElementById("bienes").innerHTML = resultado;
        document.getElementById("bienesMov").innerHTML = resultado;     
      }else{
        document.getElementById("bienesMov").innerHTML = resultado;     
      }
    }
  }
);
}
</script>

но я помещаю простую инструкцию как alert('1') в коде после того, как я загружаю функцию, и она работает правильно, поэтому я не знаю, что мне нужно сделать, чтобы поставить работа с этим процессом

<script type="text/javascript">
  $(document).ready(function(){
    ramos_detalles();
    alert('1');
  $("#ProvinciaBien").change(function(){cantones_pronvincias();});
  $("#CantonBien").change(function(){parroquias_cantones();});
});
//
function ramos_detalles(){
var code = '<?php echo $negocios['idRamo']; ?>';
var code2 = '<?php echo ($negocios['bolItem'] == 1) ? 1 : 0; ?>';
var vigencia = '<?php echo $negocios['bolVigencia']; ?>';
//
$.get("scripts/catalogos_detalles.php", { code: code, code2: code2 },
  function(resultado){
    if(resultado != false){
      document.getElementById("Bien").disabled = true;
      if(vigencia == 0){
        document.getElementById("bienes").innerHTML = resultado;
        document.getElementById("bienesMov").innerHTML = resultado;     
      }else{
        document.getElementById("bienesMov").innerHTML = resultado;     
      }
    }
  }
);
}
</script>

мне, очевидно, не нужен экран предупреждения при запуске программы.

Если вы можете мне помочь, Спасибо за сотрудничество.

Author: juanitourquiza, 2018-07-02

2 answers

То, что вы пишете с alert, звучит очень похоже на то, что ваш код не ждет готовности данных перед их использованием, я объясняю: поставив alert, что вы делаете, это даете ramos_detalles(); время для правильной загрузки данных для использования в функциях, используемых под alert, поэтому, когда вы закрываете alert, прошло достаточно времени, чтобы ramos_detalles(); подготовил данные, необходимые для последующих функций, которые зависят от ramos_detalles();.

Я не могу иметь уверенность в том, что это ваша проблема, потому что вы не поставили код, необходимый для репликации ошибки, поэтому следующее может не сработать для вас точно...

Измените свой код на следующий, если он работает, то продолжайте читать, если не porfa поместите как можно больше кода, чтобы улучшить ответ:

   $(document).ready(function(){
      ramos_detalles();
      setTimeout(()=>{
          $("#ProvinciaBien").change(function(){cantones_pronvincias();});
          $("#CantonBien").change(function(){parroquias_cantones();});
      },3000)

   });

Это временное решение, но я не могу быть уверен, потому что я не знаю, что они делают cantones_pronvincias() и parroquias_cantones().

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

Обратные вызовы: В этом случае реорганизуйте код так, чтобы он выполнялся только внутри callback ajax

         $(document).ready(function(){
            ramos_detalles();


        });

        function ramos_detalles(){
            var code = '<?php echo $negocios['idRamo']; ?>';
            var code2 = '<?php echo ($negocios['bolItem'] == 1) ? 1 : 0; ?>';
            var vigencia = '<?php echo $negocios['bolVigencia']; ?>';
            //
            $.get("scripts/catalogos_detalles.php", { code: code, code2: code2 },
              function(resultado){
                if(resultado != false){
                  document.getElementById("Bien").disabled = true;
                  if(vigencia == 0){
                    document.getElementById("bienes").innerHTML = resultado;
                    document.getElementById("bienesMov").innerHTML = resultado;     
                  }else{
                    document.getElementById("bienesMov").innerHTML = resultado;     
                  }
                }
                $("#ProvinciaBien").change(function(){cantones_pronvincias();});
                $("#CantonBien").change(function(){parroquias_cantones();});
              });
        }

Способ сделать это с обещаниями я оставляю в качестве задачи ...

Я не пробовал код выше, так что могут быть синтаксические ошибки ...

 1
Author: clay, 2018-07-02 23:58:54

Возможно, вы не загрузили DOM, попробуйте заменить

 $(document).ready(function(){

con
  $(window).on("load",function() { 
 0
Author: Luciano Montañez, 2018-07-02 21:12:41