【发布时间】:2010-04-09 22:11:21
【问题描述】:
我有一个小的 PHP 页面,其中包含两个下拉列表
我需要根据在第一个下拉列表中选择的结果填充第二个....这可能吗?换句话说,我需要使用从第一个下拉列表中选择的值,并在用于填充第二个下拉列表的 dB 查询中使用它(但这应该在选择第一个下拉列表时填充。
如果可能,请提供任何提示? (你可以假设我能够从 dB 中填充第一个下拉列表)
谢谢
【问题讨论】:
标签: php select drop-down-menu option
我有一个小的 PHP 页面,其中包含两个下拉列表
我需要根据在第一个下拉列表中选择的结果填充第二个....这可能吗?换句话说,我需要使用从第一个下拉列表中选择的值,并在用于填充第二个下拉列表的 dB 查询中使用它(但这应该在选择第一个下拉列表时填充。
如果可能,请提供任何提示? (你可以假设我能够从 dB 中填充第一个下拉列表)
谢谢
【问题讨论】:
标签: php select drop-down-menu option
选项 1:将第二个选择的数据作为隐藏元素或 JS 对象嵌入到文档中。第一个选择上的change 事件处理程序将填充第二个选择。 A List Apart 有一个example dynamic select page。
选项 2:使用 AJAX。当第一个选择更改时,向服务器请求第二个选择的内容,然后填充它。使用 JS 库(如 jQuery),这变得非常容易。
$('select#one').change(
function (evt) {
$('select#two').load('/thing/'+this.value);
}
);
"/thing/
$('select#one').change(
function (evt) {
$('select#two').load('/thing/'+this.value, {fmt: 'option'});
}
);
【讨论】:
您必须使用 AJAX 将第一个下拉列表的选择发送到服务器。然后,您可以查询数据库并生成第二个下拉列表并将其发送回用户。
【讨论】:
您需要异步回调服务器,无需重新加载页面。 (我怀疑你是否真的想要一个回发到服务器的按钮)所以 AJAX 正是可以做到这一点的东西。将 AJAX 调用添加到您的第一个下拉列表的 onchange 事件处理程序,将选择发送回服务器并返回第二个下拉列表的内容。当 AJAX 调用返回新值时,您将使用它为第二个下拉菜单构建内容。其中大部分是用 Javascript 完成的,当然,除了实际的服务器部分,它将保留在 PHP 中。
【讨论】:
有两种方法。老式的“选择一个选项并提交以重建页面”方法,这种方法非常普遍,以及新奇的 AJAX 方法,无需刷新页面即可加载第二个下拉列表的内容。
两者都有优点/缺点,因此归结为最适合您的目的。 oldschool 方法根本不需要任何 javascript,但由于它确实通过服务器往返表单,因此您会看到“清除窗口然后重绘页面”闪烁。
AJAX 方法绕过刷新闪烁,但在禁用 Javascript 的浏览器上也不起作用。它确实需要更多的客户端代码来处理 AJAX 调用和下拉列表的填充,但是两种方法的服务器端代码几乎相同:相同的查询,相同的检索循环,只是不同的输出方法。
【讨论】:
@outis 在 jquery 中使用 .change 有好处,否则在 select 代码中使用 onchange 事件。
喜欢
<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
}
你可以看到这个Dynamically Populating Dropdown Based On Other Dropdown Value
【讨论】: