【问题标题】:Execute function on dropdown menu change in PHP在 PHP 中更改下拉菜单时执行函数
【发布时间】:2020-11-25 03:32:13
【问题描述】:

这里有一个小代码 sn-p,效果不错,但不是我想要达到的效果:

<html>
<head>
</head>
<body>
<form method='post'>
    Display
    <select name="displayOptions" onchange="this.form.submit()">
        <option selected value="all">all</option>
        <option value="open">open</option>
        <option value="reserved">reserved</option>
        <option value="blocked">blocked</option>
    </select> computers
</form>

<?php
    if(isset($_POST["displayOptions"])){
        if ($_POST["displayOptions"]=='all')
           allFunction();
        if ($_POST["displayOptions"]=='open')
           openFunction();
        etc...
   }
?>
</body>
</html>

一旦用户选择了一个下拉选项,我希望该操作发生。我还希望默认操作为“全部”,并且在加载表单后立即发生。上面的代码 sn-p 运行良好,但有两件事除外。​​

  1. 'all' 默认被选中(按预期工作),但是 allFunction() 不运行。即使您选择另一个选项,然后再次选择“全部”,“全部”仍然不起作用。我希望 allFunction 在此表单加载并选择“全部”后立即运行,当然,以后能够再次选择“全部”。
  2. 无论何时选择不同的选项,它都会加载正确的函数 (WAI),但下拉菜单会变回全部。我知道它为什么这样做(因为正在重新加载页面并且“all”是默认选择值),但我希望它保留在所选选项上!

当我输入此内容时,我感觉我可以使用 $_SESSION 变量来处理 #2,但我仍然很难理解为什么选择下拉列表中的第一个选项没有注册。

【问题讨论】:

  • 使用 ajax 可能会受益更多。从教程中寻找那个和示例。外面有很多东西,相信我。我不会误导你的。
  • 如果这确实源于可能的错误,请检查您的控制台并启用错误报告。

标签: javascript php html forms function


【解决方案1】:

正如 Funk 所指出的,您可能希望查看 ajax 调用,以避免在选择某些内容时重新加载页面(这可以说是一种糟糕的用户体验),但如果您坚持使用相同的结构,您可以这样做:

<?php
    // Set the option selected ("all" by default)
    $option_selected = !empty($_POST["displayOptions"])? $_POST["displayOptions"] : "all";
?>

...

<select name="displayOptions" onchange="this.form.submit()">
    <option value="all" <?php if ($option_selected == "all") echo "selected" ?>>all</option>
    <option value="open" <?php if ($option_selected == "open") echo "selected" ?>>open</option>
    <option value="reserved" <?php if ($option_selected == "reserved") echo "selected" ?>>reserved</option>
    <option value="blocked" <?php if ($option_selected == "blocked") echo "selected" ?>>blocked</option>
</select>

...

<?php
    if ($option_selected == "all")
       allFunction();
    else if ($option_selected == "open")
       openFunction();
    etc...
?>

我还没有测试它,但它应该可以正常工作。

【讨论】:

  • 这很好用!我是 PHP 新手,我正在用表单和 if(isset ($_POST) 块做所有事情。我没有意识到你可以这样做。我的大脑突然顿悟了,非常感谢!跨度>
  • 很高兴听到这个消息。请记住,您可以使用简单的 JS 在客户端做很多事情。例如,如果您上面的函数仅显示几乎没有逻辑的 HTML,您可以一次加载所有元素并使用 display:none 隐藏它们,当您的用户选择某些内容时,使用 display:block 显示适当的元素以避免重新加载整个页面
  • 试图在我的项目中实现它并且它没有按我的预期工作:(让我试着说明我的流程:登录页面后,用户点击登录,它检查数据库以确保用户名有效,将用户名存储在 SESSION var 中,然后调用 start() 函数。我的登录页面仍然显示在顶部,这就是我想要的。在 start 函数中,我显示一些“开始文本”,以及这个该死的下拉菜单。默认的“全部”选择​​是 WAI 并运行我的 allFunction(在下拉列表下方显示更多文本)。当我选择“打开”时,表单与我的所有“开始文本”一起消失
  • 我想要这个下拉菜单做的只是根据选择的内容在下面显示不同的内容,但这似乎已经重新加载了我的整个页面而没有我的 start() func(这是这个下拉菜单所在的位置)
  • 只要您保留onchange="this.form.submit()",页面就会在用户选择时重新加载。
猜你喜欢
  • 1970-01-01
  • 2018-03-02
  • 1970-01-01
  • 2014-05-27
  • 1970-01-01
  • 1970-01-01
  • 2020-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多