如何根据另一个的选定项目过滤一个组合框集合?

Posted

技术标签:

【中文标题】如何根据另一个的选定项目过滤一个组合框集合?【英文标题】:How to filter one combo-box collection depending on the selected item of another? 【发布时间】:2011-10-20 16:37:08 【问题描述】:

在表单的 php 页面上,一个组合框包含来自 mysqlcustomer. 的客户列表,另一个组合框包含来自invoice 表的invoiceno 字段,分别对应于客户记录。

我想从第一个组合框中选择一个客户,并根据客户从第二个组合框中过滤 invoiceno。谁能帮我完成这个?

例如,如果我选择 customer1,第二个组合框应该显示所有 invoiceno 对应于 customer1。我想在不刷新、重新加载或发布页面的情况下执行此操作。如果我在 php 变量 $customer 中获得第一个选择,那对我来说就足够了。谢谢!

【问题讨论】:

【参考方案1】:

AJAX 是你的朋友:

    捕获第一个组合框的 onchange 事件

    然后通过 AJAX 将选中项的值发送到你的 PHP 脚本

    您的 PHP 脚本从数据库中加载相应的值并返回它们(例如 JSON 格式)

    最后通过 javascript 显示/插入返回的数据。

伪代码:

JavaScript:

function displayData(json)

  // Do something

document.getElementById("your-combobox").addEventListener("change", function()

  var xhr = new XMLHttpRequest();
  xhr.onreadystatechange = function()
  
    if (xhr.readyState==4 && xhr.status==200)
    
      displayData( JSON.parse(xhr.responseText) ); // Call displayData with the JSON
    
  ;
  xhr.open("GET", "your-script.php?combobox1="+encodeURIComponent(this.value));
  xhr.send(null); // Send AJAX request
);

PHP:

<?php

if (!isset($_GET['combobox1'])) exit('');

$data = GetDataFromDB_AsArray();

echo json_encode($data);

?>

【讨论】:

以上是关于如何根据另一个的选定项目过滤一个组合框集合?的主要内容,如果未能解决你的问题,请参考以下文章

单击另一个按钮时无法获得组合框选定的项目值

根据数据绑定组合框中的选定项目从访问数据库中删除

如何将选定的 extjs 组合值设置为另一个组合框

如何将组合框视为另一个表单的链接?

如何将两个组合框的选定项与单个数据源分开?

由于另一个组合框字符串值,如何更改组合框上的项目?