我需要帮助制作一个包含数据库数据的级联下拉列表
我找到了一个关于这个的教程和我试过这个
控制器:
function ajax_call() {
if(!empty($_POST['table'])){
if ($_POST) {
$table = $_POST['table'];
$arrYear = $this->my_model->get_categories($table);
foreach ($arrYear as $years) {
$arrFinal[$years->category2 = $years->category2;
}
echo "<p>2nd Category:<br>";
echo form_dropdown('year',$arrFinal);
echo "</p><br>";
}
else
{
echo "<p>2nd Category:<br>";
echo form_dropdown('year','');
echo "</p><br>";
}
}
}
我的观点:
$options = array(
'' => 'Select',
'category_one' => 'Category 1',
'category_two' => 'Category 2',
);
echo form_error('table');
echo "<p>Category:<br> ";
echo form_dropdown('table', $options, $this->input->post('table'), 'id="table"');
echo "</p><br>";
我的视图中的脚本:
<script type="text/javascript">
$(document).ready(function(){
$('#table').change(function(){
var selTable = $(this).val(); // selected name from dropdown #table
$.ajax({
url: "ajax_call", // or "resources/ajax_call" - url to fetch the next dropdown
async: false,
type: "POST", // post
data: "table="+selTable, // variable send
dataType: "html", // return type
success: function(data) { // callback function
$('#year').html(data);
}
})
});
});
</script>
我的型号:
function get_categories($table) {
$this->db->select('category2')->from($table);
$query = $this->db->get();
return $query->result();
}
我唯一的问题是,当加载时,第二个下拉列表在页面上不可见,只有当我在第一个下拉列表上选择时,它才会出现。
如何在不选择第一个下拉菜单的情况下将其设置为显示在页面上?有人能帮忙吗?
好吧,我不知道该怎么做。因此,我在互联网的深处搜索,发现了这个小教程,这正是我所需要的。
http://supundharmarathne.wordpress.com/2013/03/13/simple-ajax-drop-down-filtering-with-codeigniter/
之所以会发生这种情况,是因为只有在表更改$('#table').change(function(){...})
之后才会触发填充表的ajax调用。尝试在不等待此类更改的情况下填充表;可能在$(document).ready(function(){...})
内部
您在代码中添加了一个完全过时的if ($_POST)
。您已经在检查$_POST中是否存在一个变量,因此在此之后它永远不能为空。这导致ELSE语句与第二个IF相关,而不是第一个IF。
function ajax_call() {
if(!empty($_POST['table'])){
$table = $_POST['table'];
$arrYear = $this->my_model->get_categories($table);
foreach ($arrYear as $years) {
$arrFinal[$years->category2 = $years->category2;
}
echo "<p>2nd Category:<br>";
echo form_dropdown('year',$arrFinal);
echo "</p><br>";
}
else
{
echo "<p>2nd Category:<br>";
echo form_dropdown('year','');
echo "</p><br>";
}
}
这就是为什么您应该始终正确缩进代码的原因。