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