动态填充PHP中的下拉列表

时间:2010-04-09 22:11:22

标签: php select drop-down-menu option

我有一个小的PHP页面,其中包含两个下拉列表

我需要根据第一个下拉列表中选择的结果填充第二个....这可能吗?换句话说,我需要使用从第一个下拉列表中选择的值,并在用于填充第二个下拉列表的dB查询中使用它(但这应该在选择第一个下拉列表时填充。

如果可以提供任何提示吗? (您可以假设我能够从dB填充第一个下拉列表)

感谢

5 个答案:

答案 0 :(得分:2)

选项1:将文档中第二个选择的数据嵌入为隐藏元素或JS对象。第一个选择上的change事件处理程序将填充第二个选择。 List Apart有一个example dynamic select page

选项2:使用AJAX。当第一个选择更改时,向服务器请求第二个选择的内容,然后填充它。使用JS库(例如jQuery),这变得非常简单。

$('select#one').change(
  function (evt) {
    $('select#two').load('/thing/'+this.value);
  }
);

“/事情/< VAL>” 中标识您的服务器端脚本以根据“< val>”生成项目列表(使用Web服务器的重写功能来解析实际脚本的URL路径)。您可以简单地让它始终生成< option>元素,但更好的设计是包括一种指定结果格式的方法,因此它可以使用JSON或其他格式将列表输出为< li&gt ;.

$('select#one').change(
  function (evt) {
    $('select#two').load('/thing/'+this.value, {fmt: 'option'});
  }
);

答案 1 :(得分:1)

您必须使用AJAX将第一个下拉列表的选择发送到服务器。然后,您可以查询数据库并生成第二个下拉列表并将其发送回用户。

答案 2 :(得分:0)

您需要异步回调服务器,而不需要重新加载页面。 (我怀疑你真的想要一个回复服务器的按钮)所以AJAX可以做到这一点。将AJAX调用添加到您的第一个下拉列表的onchange事件处理程序,该处理程序将选择内容发布回服务器并返回第二个下拉列表的内容。当AJAX调用返回新值时,您将使用它来构建第二个下拉列表的内容。当然,大部分内容都是在Javascript中完成的,除了实际的服务器部分,它将保留在PHP中。

答案 3 :(得分:0)

有两种方法可以做到这一点。旧学校“选择一个选项并提交以重建页面”方法,该方法非常普遍,以及新奇的AJAX方法,可以在不刷新页面的情况下加载第二个下拉列表的内容。

两者都有优点/缺点,因此它归结为最适合您的目的。 oldschool方法根本不需要任何javascript,但由于它通过服务器对表单进行往返,你将得到“清除窗口,然后重绘页面”闪烁。

AJAX方法会绕过刷新闪烁,但也不适用于禁用Javascript的浏览器。它需要更多的代码,客户端,来处理AJAX调用和下拉列表,但服务器端代码对于两种方法几乎相同:相同的查询,相同的检索循环,只是不同的输出方法

答案 4 :(得分:0)

@outis在jquery中使用.change,但在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

}

您可以看到此Dynamically Populating Dropdown Based On Other Dropdown Value