动态下拉列表不起作用


Dynamic drop down list not working

我正试图将一个js var传递给一个php var,然后使用该php var遍历和数组并填充一个下拉列表。我可以看到php-var得到了正确的值,但list2和list3没有被填充。

如果我把字符串放在自己的$list1 = 'somestring';中,它可以工作,但当我使用$list1 = $_POST['choice'];时,它不工作。

<script>
$(document).ready(function(){ 
    $("#list1").change(function(){
        var selected = this.value;
    $.post("my.php", { choice: selected }, function(data){ 
          alert(data); 
    });
  });
});
</script>
<?php
echo'
<form name="menu">
 <div>
  <select name="list1" size="1" onchange="setOptions(document.menu.list1.options
  [document.menu.list1.selectedIndex].value,document.menu.list2,document.menu.list3);">
    <option value=" " selected></option>
    <option value="one">item1</option>
    <option value="two">item2</option>
    <option value="three">item3</option>
    <option value="four">item4</option>
  </select><br><br>
  <select name="list2" size="1"onchange="setOptions(document.menu.list2.options
  [document.menu.list2.selectedIndex].value,document.menu.list3,' ');">
    <option value=" " selected>Select an option</option>
  </select><br><br>
  <select name="list3" size="1">
    <option value=" " selected>Select an option</option>
  </select><br>
 </div>
</form>';
?>

下拉列表

<script>
  function setOptions(chosen, selbox, selbox2) 
  {
  selbox.options.length = 0;
  if (chosen == " ")
  {
    selbox.options[selbox.options.length] = new Option('Select an option',' ');
    selbox2.options[selbox2.options.length] = new Option("Select an option"," ");
    setTimeout(setOptions(' ',document.menu.list3),5);
  }
     if (chosen == "one")
     {
       showList2(selbox);
     }
     if (chosen == "two")
     {
       showList2(selbox);
     }
     if (chosen == "three")
     {
       showList2(selbox);
     }
     if (chosen == "four")
     {
       showList2(selbox);
     }
     //some code snipped
   }

  function showList2(selbox)
  {
  <?php
  $n = 0;
  $list1 = $_POST['choice'];
    foreach($list[$list1] as $key => $value)
    {
      $key_array[$n] =  $key;
      $Lname[$n] = $list[$list1][$key]['name'];
    $n++;
    }
  $jsArray = json_encode($key_array);
  echo "var jsKeys = ". $jsArray . ";";
  $jsArray = json_encode($Lname);
  echo "var jsNames = ". $jsArray . ";";
  ?>
    for (var i=0;i<jsKeys.length;i++)
    {
    var result = selbox2.options[selbox2.options.length] = new Option(jsNames[i],jsKeys[i]);
      if(i == jsKeys.length-1)
      {
        var result = setTimeout(setOptions(jsKeys[0],document.menu.list3,' '),5);
      }
    }
  return(result);
  }
</script>

$_POST superglobal仅在js函数启动时设置,即当您从下拉列表中选择某个内容时。否则保持为空。

您可以使用print_r($_POST) 检查$_POST阵列中的内容

通常,我使用一种实用方法从数组中检索数据:

function arrGet($array, $key, $default = NULL)
{
    return isset($array[$key]) ? $array[$key] : $default;
}

这将返回键的值或默认值。用法如:

if(arrGet($_POST, 'choice')){
    //do something
}

希望这能帮助。。。

<script>
$(document).ready(function(){ 
    $("#list1").change(function(){
        var selected = this.value;
    $.post("my.php", { choice: selected }, function(data){ 
          alert(data); 
    });
  });
});
</script>

CCD_ 6中的小CCD_ 5意味着元素的id应该匹配。

<select name="list1" .....将其更改为<select name="list1" id="list1".....>