我有一个小的 PHP 页面,其中包含两个下拉列表
我需要根据在第一个下拉列表中选择的结果填充第二个……这可能吗?换句话说,我需要使用从第一个下拉列表中选择的值,并在用于填充第二个下拉列表的 dB 查询中使用它(但这应该在选择第一个下拉列表时填充。
如果这可能有任何提示吗?(您可以假设我能够从 dB 中填充第一个下拉列表)
谢谢
我有一个小的 PHP 页面,其中包含两个下拉列表
我需要根据在第一个下拉列表中选择的结果填充第二个……这可能吗?换句话说,我需要使用从第一个下拉列表中选择的值,并在用于填充第二个下拉列表的 dB 查询中使用它(但这应该在选择第一个下拉列表时填充。
如果这可能有任何提示吗?(您可以假设我能够从 dB 中填充第一个下拉列表)
谢谢
选项 1:将第二个选择的数据作为隐藏元素或 JS 对象嵌入到文档中。第一个选择上的change事件处理程序将填充第二个选择。List Apart 有一个示例动态选择页面。
选项 2:使用 AJAX。当第一个选择更改时,向服务器请求第二个选择的内容,然后填充它。使用 JS 库(例如 jQuery),这变得非常容易。
$('select#one').change(
function (evt) {
$('select#two').load('/thing/'+this.value);
}
);
“/thing/<val>” 标识您的服务器端脚本以生成基于“<val>” 的项目列表(使用您的网络服务器的重写工具来解析实际脚本的 URL 路径)。您可以简单地让它始终生成 <option> 元素,但更好的设计是包含一种指定结果格式的方法,因此它可以使用 JSON 或其他格式将列表输出为 <li>。
$('select#one').change(
function (evt) {
$('select#two').load('/thing/'+this.value, {fmt: 'option'});
}
);
您必须使用 AJAX 将第一个下拉列表的选择发送到服务器。然后,您可以查询数据库并生成第二个下拉列表并将其发送回用户。
您需要对服务器进行异步调用,而无需重新加载页面。(我怀疑你是否真的想要一个回发到服务器的按钮)所以 AJAX 正是可以做到这一点的东西。将 AJAX 调用添加到您的第一个下拉列表的onchange事件处理程序,将选择内容发送回服务器并返回第二个下拉列表的内容。当 AJAX 调用返回新值时,您将使用它为第二个下拉菜单构建内容。其中大部分是用 Javascript 完成的,当然,除了实际的服务器部分,它将保留在 PHP 中。
@outis.change在 jquery 中有很好的用途,否则在代码中使用onchange事件。select
喜欢
<select id='my_select' onchange='javascript:myfunc()'>
<option value='a'>a</option>
.
.
<option value='z'>z</option>
function myfunc(){
//write code to populate another dropdown based on selected value
}
您可以看到这个基于其他下拉值的动态填充下拉列表
有两种方法可以做到。老式的“选择一个选项并提交以重建页面”方法,它非常普遍,以及新奇的 AJAX 方法,加载第二个下拉列表的内容而不刷新页面。
两者都有优点/缺点,因此归结为最适合您的目的。oldschool 方法根本不需要任何 javascript,但由于它确实通过服务器往返表单,因此您会看到“清除窗口然后重绘页面”闪烁。
AJAX 方法绕过刷新闪烁,但在禁用 Javascript 的浏览器上也不起作用。它确实需要更多的客户端代码来处理 AJAX 调用和下拉列表的填充,但是两种方法的服务器端代码几乎相同:相同的查询,相同的检索循环,只是不同的输出方法。