【问题标题】:Populating a Dropdown list in PHP dynamically在 PHP 中动态填充下拉列表
【发布时间】:2010-04-09 22:11:21
【问题描述】:

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

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

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

谢谢

【问题讨论】:

    标签: php select drop-down-menu option


    【解决方案1】:

    选项 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/" 标识您的服务器端脚本以生成基于“”的项目列表(使用您的网络服务器的重写工具来解析实际脚本的 URL 路径)。您可以简单地让它始终生成

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

    【讨论】:

    • 我只想补充一点,数据集的大小和所涉及的性能需求将决定您选择哪条路线。如果它太大而无法下载,则必须使用 AJAX。如果您的客户端无法使用 AJAX,或者您希望限制与服务器的连接或涉及密集查询,请使用 JS 对象/数组。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        有两种方法。老式的“选择一个选项并提交以重建页面”方法,这种方法非常普遍,以及新奇的 AJAX 方法,无需刷新页面即可加载第二个下拉列表的内容。

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

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

        【讨论】:

          【解决方案5】:

          @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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-10-17
            • 1970-01-01
            • 2023-04-03
            • 2020-06-26
            • 2015-12-11
            • 2019-06-06
            相关资源
            最近更新 更多