根据之前的下拉选项动态填充最多3个下拉菜单

slo*_*oga 9 javascript php ajax jquery cakephp-1.3

我知道有类似的问题,但我还没有找到解决方案.

我有一个样本小提琴,使用我已知的几年,几个月和几天作为样本.而不是手动添加每年的选择选项div,我希望div id根据所选年份的值动态填充,依此类推.

我有我的数据库中的所有下拉选项值(php,mysql,cakephp 1.3).第一个下拉列表包含已输入报告的唯一年份.一旦选择(onchange),第二个下拉列表将只给出为所选年份输入报告的唯一月份,然后一旦选择了月份(onchange),第三个下拉列表将填入每天输入报告的日期.报告始于2011年8月,自那以后每个月或每天都没有进入.

需要帮助我的ajax将选定的选项从第一个下拉列表发布到我的控制器,然后根据发布的值从新查询到db(模型)获取第二个下拉选项.假设用户从第一个下拉列表中选择2013,然后ajax将变量中的"2013"​​发送给我的控制器,控制器将值发送到我的模型,我的模型查询数据库以获得2013年输入报告的不同月份.由于这一年还没有结束,唯一应该出现的月份是1月到7月.这些填充了我的月份下拉菜单,用户在示例中选择了May.Ajax将May或"05"发送到控制器 - > Model,模型查询DB以获得2013年5月的独特日期.这将填充我的第三个下拉列表.我将有一个隐藏的输入字段,它将是以这种格式下拉列表中的所有选定值:MM/DD/YYYY.用户提交时,会将用户重定向到该日期的报告页面,并显示当天输入的所有记录.

谢谢你的帮助......

    <select name="drop_1" id="drop_1">
        <option value="" selected="selected" disabled="disabled">Choose Year</option>
        <option value="">Select Year</option>
        <option value="2011">2011</option>
        <option value="2012">2012</option>
        <option value="2013">2013</option>
    </select>

    <select name="drop_2" id="drop_2">
        <option value="" selected="selected" disabled="disabled">Choose Month</option>
        <option value=""></option>
        <option value="01">January</option>
        <option value="02">February</option>
        <option value="03">March</option>
        <option value="04">April</option>
        <option value="05">May</option>
        <option value="06">June</option>
        <option value="07">July</option>
    </select>

     <select name="drop_3" id="drop_3">
        <option value="" selected="selected" disabled="disabled">Choose Day</option>
        <option value=""></option>
        <option value="05/11/2013">05/11/2013</option>
        <option value="05/12/2013">05/12/2013</option>
        <option value="05/13/2013">05/13/2013</option>
    </select>
Run Code Online (Sandbox Code Playgroud)

- 这是我的jQuery但它不起作用... $ .get需要从我的模型获取值,索引只是iframes我的页面的新迭代.

    $(document).ready(function() {
    $('#wait_1').hide();
    $('#drop_1').change(function(){
      $('#wait_1').show();
      $('#result_1').hide();
      $.get("index", {  
        func: "drop_1",
        drop_var: $('#drop_1').val()
      }, function(response){
        $('#result_1').fadeOut();
        setTimeout("finishAjax('result_1', '"+escape(response)+"')", 400);
      });
        return false;
    });
});

function finishAjax(id, response) {
  $('#wait_1').hide();
  $('#'+id).html(unescape(response));
  $('#'+id).fadeIn();
}
function finishAjax_tier_three(id, response) {
  $('#wait_2').hide();
  $('#'+id).html(unescape(response));
  $('#'+id).fadeIn();
}
Run Code Online (Sandbox Code Playgroud)

- 这是我在视图中的实际表格摘录,cakephp 1.3中的"index"

<div>
    <!-- Begin Date Selection -->
    <form name="udate" action="/reports/daily/" method="post">
    <?php
    echo "<select id='drop_1' name='drop_1' title='Use the drop list'>";
    echo '<option value="" disabled="disabled" selected="selected">'."Choose Year".'</option>';
        foreach ($years as $select_year) 
        {
        echo '<option value="', $select_year[0]["Year(dated)"], '">', $select_year[0]["Year(dated)"], '</option>';
        }
    echo "</select>";?>

    <?php
    echo "<select name='drop_2' id='drop_2' title='Use the drop list'>";
    echo '<option value="" disabled="disabled" selected="selected">'."Choose Month".'</option>';
        foreach ($months as $select_month) 
        {
        echo '<option value="', $select_month[0]["Month(dated)"], '">', $select_month[0]["Month(dated)"], '</option>';
        }
    echo "</select>";
    echo "<script type=\"text/javascript\">
    $('#wait_2').hide();
        $('#drop_2').change(function(){
          $('#wait_2').show();
          $('#result_2').hide();
          $.get(\"index\", {
            func: \"drop_2\",
            drop_var: $('#drop_2').val()
          }, function(response){
            $('#result_2').fadeOut();
            setTimeout(\"finishAjax_tier_three('result_2', '\"+escape(response)+\"')\", 400);
          });
            return false;
        });
    </script>";?>

    <?php
    echo "<select id='drop_3' name='drop_3' title='Use the drop list'>";
    echo '<option value="" disabled="disabled" selected="selected">'."Choose Day".'</option>';
        foreach ($days as $select_item) 
        {
        echo '<option value="', $select_item[0]["Days(dated)], '">', $select_item[0]["Days(dated)], '</option>';
        }
    echo "</select>";?>
  <span id="wait_1" style="display: none;">
    <img alt="Please Wait" src="http://dev.asi.calpoly.edu/img/ajax-loader.gif"/>
</span>
<span id="result_1" style="display: none;"></span>
<span id="wait_2" style="display: none;">
<img alt="Please Wait" src="http://dev.asi.calpoly.edu/img/ajax-loader.gif"/>
</span>
<span id="result_2" style="display: none;"></span> 
            <?php echo $form->submit('Submit') ?>
        </form>
    </div><!-- End Date Selection -->
Run Code Online (Sandbox Code Playgroud)

Bor*_*bev 2

你应该做的是:

  1. 将更改事件附加到每个下拉列表 - 或至少前两个。

  2. 发生更改事件时,对服务器进行 AJAX 调用(传递一些参数),并使用服务器返回的内容重新填充下一个选择框。这里的“技巧”是您必须独自决定如何传递参数(GET、POST)以及如何创建选择框 HTML。

  3. AJAX 调用完成并返回数据后,您需要填充下一个选择。在这里,您可以让服务器发送准备好的 HTML 以供选择,也可以获取数据并构建标记客户端。最好对发送的 HTML 进行预渲染。

  4. 对下一个下拉列表重复该过程。