You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于PHP/JQuery实现下拉框联动自动填充

基于OL Code下拉框选择实现产品下拉框自动填充方案

一、修正OL Code下拉框的触发配置

首先需要给OL Code下拉框绑定触发事件,同时修正选择器ID以匹配前端JS逻辑:

create.php 中的OL Code下拉框修改:

<div class="form-group">
  <label for="gross_amount" class="col-sm-2 control-label" style="text-align:left;">OL Code</label>
  <div class="col-sm-6">
    <select class="form-control" id="olcode_1" name="table_name" onchange="getProd(1)">
      <?php foreach ($orderlist_data as $key => $value): ?>
      <option value="<?php echo $value['id'] ?>"><?php echo $value['ol_code'] ?></option>  
      <?php endforeach ?>                     
    </select>
  </div>
</div>

edit.php 中的OL Code下拉框修改(适配动态行ID):

<div class="form-group">
  <label for="gross_amount" class="col-sm-2 control-label" style="text-align:left;">OL Code</label>
  <div class="col-sm-6">
    <select class="form-control" id="olcode_<?php echo $x; ?>" name="table_name" onchange="getProd(<?php echo $x; ?>)">
      <?php foreach ($orderlist_data as $key => $value): ?>
      <option value="<?php echo $value['id'] ?>" <?php if($val['orderlist_id'] == $value['id']) echo 'selected'; ?>><?php echo $value['ol_code'] ?></option>  
      <?php endforeach ?>                     
    </select>
  </div>
</div>

二、完善后端接口逻辑

在orderlist/getOrderListById接口中,根据传入的orderlist_id判断对应的OL Code,返回预设产品数据:

public function getOrderListById() {
    $orderlist_id = $this->input->post('orderlist_id');
    // 从数据库查询对应订单列表信息
    $orderlist = $this->db->get_where('orderlists', ['id' => $orderlist_id])->row_array();
    
    $response = ['products' => []];
    
    // 匹配目标OL Code,返回预设产品
    if(!empty($orderlist) && $orderlist['ol_code'] === 'OLCODE-1E6E') {
        // 可替换为数据库查询逻辑,此处为示例预设数据
        $response['products'] = [
            ['id' => 1, 'name' => '预设产品1'],
            ['id' => 2, 'name' => '预设产品2']
        ];
    }
    
    echo json_encode($response);
}

三、完善前端AJAX函数逻辑

补全getProd函数的空值处理与成功回调逻辑,实现产品下拉框的动态填充:

function getProd(row_id) {
  var orderlist_id = $("#olcode_"+row_id).val();    
  var productSelect = $("#product_"+row_id);
  
  if(orderlist_id === "") {
    // 清空下拉框,恢复默认选项
    productSelect.empty();
    // 根据页面类型选择默认选项:create页用下面第一行,edit页用第二行
    productSelect.append('<option value="maincat" selected>--Select Products--</option>');
    // productSelect.append('<option value="" selected></option>');
    // 触发下拉框变更事件,适配关联逻辑
    productSelect.trigger('change');
  } else {
    $.ajax({
      url: base_url + 'orderlist/getOrderListById',
      type: 'post',
      data: {orderlist_id : orderlist_id},
      dataType: 'json',
      success:function(response) {
        // 清空现有选项
        productSelect.empty();
        
        // 填充预设产品选项
        if(response.products && response.products.length > 0) {
          response.products.forEach(function(product) {
            productSelect.append(`<option value="${product.id}">${product.name}</option>`);
          });
          // 可选:默认选中第一个产品
          // productSelect.val(response.products[0].id);
        } else {
          // 无预设产品时显示默认选项
          productSelect.append('<option value="maincat" selected>--Select Products--</option>');
          // edit页替换为:productSelect.append('<option value="" selected></option>');
        }
        
        // 触发变更事件,确保关联的getProductData函数执行
        productSelect.trigger('change');
      },
      error:function() {
        // 请求失败时恢复默认状态
        productSelect.empty();
        productSelect.append('<option value="maincat" selected>--Select Products--</option>');
      }
    }); 
  }
}

注意事项

  • 若产品下拉框使用了Select2等插件,需在填充选项后调用productSelect.select2('destroy').select2();刷新样式
  • 后端需做好参数校验与SQL注入防护,避免安全问题
  • edit页中可根据实际需求调整默认选项的显示逻辑

内容的提问来源于stack exchange,提问作者wloleo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 23:10:13