【问题标题】:Showing content in select box base on previous select box根据前一个选择框在选择框中显示内容
【发布时间】:2018-08-12 04:21:20
【问题描述】:

你好开发者社区。我需要你的帮助。我正在构建一个考勤管理项目。在这个项目中,我被困在一个功能上。 我想要的是根据块输入显示部门而不转到下一页。

<div class="form-group">
   <label for="block" class="control-label col-sm-2">Select block:</label>
       <div class="col-xs-10">
          <select class="form-control" name="block" id="block">
             <option selected="selected" value="">Select Block:</option>
                <?php 
                      $q="select * from blocks ORDER BY block_name";
                      $res=mysqli_query($con,$q);
                      while($row=mysqli_fetch_array($res)){
                         echo "<option value='$row[block_id]'class='form-control'>".$row['block_name']."</option>";
                      }
                ?>
              </select>
        </div>
</div>
<div class="form-group">
   <label for="department" class="control-label col-sm-2">Select department:</label>
       <div class="col-xs-10">
          <select class="form-control" name="department" id="department">
                <option selected="selected" value="">Select Department:</option> 

                      <?php 
                          $q="select * from departments ORDER BY department_name";
                          $res=mysqli_query($con,$q);
                          while($row=mysqli_fetch_array($res)){
                               echo "<option  value='$row[department_id]'class='form-control'>".$row['department_name']."</option>";
                          }
                     ?>
          </select>
   </div>

【问题讨论】:

  • 您可以使用 Ajax 或将block 作为class 添加到每个部门。现在,在第一个下拉列表的onchange 事件中,隐藏所有没有此块作为类的元素,并仅显示具有此块作为类的那些部门。

标签: php jquery css ajax html


【解决方案1】:

创建一个 PHP 文件,例如dep-getter.php

<?php
// Include your connection config
include 'db-config.php';

// getting block value
$block = $_GET['block'];

$where = !empty($_GET['block']) ? "block='$block'" : '1=1';
$q="select * from departments ORDER BY department_name WHERE $where";
$res=mysqli_query($con,$q);
while($row=mysqli_fetch_array($res)){
    echo "<option  value='$row[department_id]'class='form-control'>".$row['department_name']."</option>";
}
?>

JavaScript/jQuery:

$(document).ready(function() {
  $('.block-select').change(function() {
    var val = $(this).val();
    $.ajax({
      url: '/path/to/dep-getter.php?block='+val,
      method: 'GET',
      success: function(data) {
        $('.select-department').html(data);
      },
      error: function() {
        console.log('Something went wrong!');
      }
    });
  });
});

为了简单理解,我使用前面的代码。详细解释可以阅读 Ajax 文档。

注意: 您需要将类添加到名称为select-department 的部门选择选项中作为放置ajax 结果的目标。

希望对您有所帮助。

【讨论】:

    【解决方案2】:

    我认为最好的方法是使用 Ajax。 但是,如果您还不了解 Ajax,则想法是重新加载当前页面,并附加带有 Block 值的查询字符串,然后根据块值显示 Department

    因此,为了获取块值并重新加载,您可以使用 jQuery 进行简单的操作。 代码是这样的。

    块选择选项(为选择器添加类):

    <select class="block-select">
      <option value="1">Option 1</option>
      <option value="2">Option 2</option>
      <option value="3">Option 3</option>
    </select>
    

    JavaScript/jQuery:

    $(document).ready(function() {
        $('.block-select').change(function() {
        var val = $(this).val();
        var curUrl = window.location.href;
        // Append the value to current URL & reload
        var targetUrl = curUrl + '?block=' + val;
        window.location.href = targetUrl;
      });
    });
    

    然后将您的部门选择选项更改为如下所示:

    <select class="form-control" name="department" id="department">
        <?php 
        $where = !empty($_GET['block']) ? "block='$_GET[block]'" : '1=1';
        $q="select * from departments ORDER BY department_name WHERE $where";
        $res=mysqli_query($con,$q);
        while($row=mysqli_fetch_array($res)){
            echo "<option  value='$row[department_id]'class='form-control'>".$row['department_name']."</option>";
        }
        ?>
    </select>
    

    上面的代码会从URL中检查block值,如果block不为空则通过block值获取部门数据,否则全部获取。

    【讨论】:

    • 感谢您的回答。能否请您告诉我有关 ajax 和 ajax 代码来完成我的任务。
    • 要使用 Ajax,您需要另一个 PHP 文件作为 ajax 目标。请在下面查看我的答案(请稍等...)。
    • 当我使用你的 jquery 代码时,它运行良好。唯一的问题是,当我们第一次不小心选择了错误的选项,重新加载后我们更正了我们的块,它再次重新加载,再次重新加载后,它根据之前选择的块显示部门。
    • 我认为问题出在 Block selected 选项上,你必须有一个条件才能设置一个选项被选中。
    • 类似这样的:$selected = $row['block_id'] == $_GET['block'] ? 'selected' : '';,然后将$selected 添加到您的块选项中:echo "`
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    相关资源
    最近更新 更多