【问题标题】:Codeigniter cascading dropdown with data from databaseCodeigniter 级联下拉列表与数据库中的数据
【发布时间】:2014-09-22 22:26:08
【问题描述】:

我需要帮助来制作包含数据库数据的级联下拉列表

我找到了一个关于这个的教程 和 这个我试过了

控制器:

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();
        }

我唯一的问题是加载时页面上看不到第二个下拉菜单,并且只有在我选择第一个下拉菜单时才会出现。

如何在不选择第一个下拉菜单的情况下将其设置为显示在页面上? 有人可以帮忙吗?

【问题讨论】:

    标签: php jquery codeigniter


    【解决方案1】:

    好吧,我不知道如何做我想做的事。因此,我搜索了互联网的深处,发现这个小教程正是我需要的。

    http://supundharmarathne.wordpress.com/2013/03/13/simple-ajax-drop-down-filtering-with-codeigniter/

    【讨论】:

      【解决方案2】:

      发生这种情况是因为填充表格的 ajax 调用仅在表格更改 $('#table').change(function(){...}) 后触发。尝试填充表格而不等待此类更改;可能在$(document).ready(function(){...})

      里面

      【讨论】:

      • 我如何做到这一点?
      【解决方案3】:

      您在代码中添加了一个完全过时的if ($_POST)。您已经在检查 $_POST 中的变量是否存在,因此之后它永远不会为空。这导致您的 ELSE 语句与第二个 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>";
          }
      }
      

      这就是为什么您应该始终正确缩进代码。

      【讨论】:

      • 您好先生,谢谢您的回复,我尝试了您的代码,但是当我选择一个空值的选项时,它会导致 Php 错误
      • 然后修改脚本来处理这些。如果您正在使用 PHP,我只能假设您在尝试这些东西之前至少做了几个教程。
      • 如果你展示你如何在你的视图中使用下拉菜单会更好
      • @danielad 或者... 去ellislab.com/codeigniter/user-guide/helpers/form_helper.html 看看form_dropdown() 写得很好的解释和例子(那确实是codeigniter 文档)
      猜你喜欢
      • 1970-01-01
      • 2022-06-22
      • 2012-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多