Javascript document.getElementById().options.length显示从列表栏中选择的最后一个元素,而不是当前选择

Javascript document.getElementById().options.length显示从列表栏中选择的最后一个元素,而不是当前选择,javascript,php,html,ajax,Javascript,Php,Html,Ajax,我有一个脚本,允许从下拉选择中选择目录,然后在另一个下拉选择中显示其子目录。我试图检查所选目录是否有子目录,如果有,则显示一条消息,指示是否有可用的子目录,即没有子目录或子目录 问题在于,将显示从目录下拉列表中选择的最后一个元素的警报消息,而不是当前目录选择 例如,如果当前选择是目录2,而上一个选择是目录1,则document.getElementByIdsubdir.options.length;显示的是目录1,而不是目录2。我不确定问题出在哪里,因此非常感谢您的帮助,谢谢 <scrip

我有一个脚本,允许从下拉选择中选择目录,然后在另一个下拉选择中显示其子目录。我试图检查所选目录是否有子目录,如果有,则显示一条消息,指示是否有可用的子目录,即没有子目录或子目录

问题在于,将显示从目录下拉列表中选择的最后一个元素的警报消息,而不是当前目录选择

例如,如果当前选择是目录2,而上一个选择是目录1,则document.getElementByIdsubdir.options.length;显示的是目录1,而不是目录2。我不确定问题出在哪里,因此非常感谢您的帮助,谢谢

<script type='text/javascript'>
  $(function() {
    $("#dirs").on('change', function() {
      var Dir = $(this).val();
      //Make an ajax call 
      $("#subdir").html('<option>Loading...</option>');
      $.get("ajax.php?Dirs=" + encodeURIComponent(Dir), function(data) {
        $("#subdir").html(data);
      });
    });
  });
</script>
<script>
  function myFunction() {
    var y = document.getElementById("subdir").options.length;

    alert(y);

    if (y <= 1) {
      alert('no subdirs');
    } else if (y > 1) {
      alert('subdirs');
    }
  }
</script>
<select id="dirs" name="Dirs" onChange="myFunction()">
  <option value="" selected="selected" disabled="yes">Select Directory</option>
  <?php
     $dirs = glob("/*", GLOB_ONLYDIR);
     foreach($dirs as $val){
       echo '<option value="'.$val.'">'.basename($val)."</option>\n";
     }
  ?>
</select>
<select name="subdir" id="subdir" required>
  <option value="Select Sub Directory" selected="selected" disabled="yes">Select Sub Directory</value>
</select>
和ajax.php:

<?php
/* AJAX check  */
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) &&
strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {

  //Check for passed dir exist 
  $folder = $_GET['Dirs'];

  if(!file_exists($folder)) {
    exit('Folder Not Found');
  }

  $out = '';

  $files = array_filter(glob($folder.'/*'), 'is_dir');
  echo '<option value="Select Sub Directory" selected="selected" disabled = "yes">Select Sub Directory</value>';

  foreach($files as $val){
    $out .= '<option value="'.$val.'">'.basename($val)."</option>\n";
  }

  //Output the file options
  exit($out);
}
?>

问题很简单;这一切都与时间有关

<select id="dirs" name="Dirs" onChange="myFunction()">
看到它摆弄了subdir的内容,但是ajax仍然没有被调用,我们仍然使用早期dir中的任何内容。简言之,subdir中有过时的数据 这就是为什么它总是显示以前的数据

如何修复? 从这里开始,将函数调用移到ajax回调中

$( "#subdir" ).html( data ); 
 myFunction();
});

???因为您正在Ajax调用返回之前阅读它…嘿,Viney,非常感谢您的输入和时间!,问题已解决:。
$( "#subdir" ).html( data ); 
 myFunction();
});