【问题标题】:PHP form that loads content based on dropdown list option基于下拉列表选项加载内容的 PHP 表单
【发布时间】:2016-02-10 13:18:30
【问题描述】:

参考这个例子PHP form that loads content based on dropdown option

解决方案 1,PHP

1) 索引形式

<form action="loadPage.php" method="POST" name="theForm" id="theForm">
<select form="theForm" name="selectedPage">
  <option value="page_1">Page 1</option>
  <option value="page_2">Page 2</option>
  ...
</select>
<input type="submit" value="Load page" />
</form>

2) PHP 处理程序

<?php
//loadPage.php
$requested_page = $_POST['selectedPage'];

switch($requested_page) {
  case "page_1":
    header("Location: page_1.php");
  break;
  case "page_2":
    header("Location: page_2.php");
  break;
  default :
  echo "No page was selected";
  break;
}
?>

我只想做它而不需要点击提交。我想通过单击下拉列表值来实现这一点,然后检查它是否等于 Php 文件中的值,如果是,则显示页面。

非常感谢。

【问题讨论】:

  • 只需通过即可。 jQuery 的 change-function 和 Ajax。您可以检测用户是否选择了该选项并通过它发送。 Ajax 到后端。 PHP 脚本应该以 JSON 格式返回响应,并且前端可以处理它。
  • 我认为您绝对必须在 PHP 中执行此操作,无论出于何种原因,但使用完全在客户端检查表单和显示/隐藏内容将是一个更好的解决方案JavaScript,无需向服务器发送请求即可运行您的 PHP 代码。如果您实际上没有明确限制使用 PHP 执行此操作,我强烈建议您不要这样做。

标签: php html if-statement switch-statement


【解决方案1】:

编写html如下:

<select form="theForm" name="selectedPage" onchange="this.form.submit()">
  <option value="page_1">Page 1</option>
  <option value="page_2">Page 2</option>
</select>

这将在您选择选项时提交表单。

【讨论】:

  • 这比其他答案要好得多。代码更简单,而且不必为列表中的每个选项实现多个 php 文件......这是可维护性的噩梦。
【解决方案2】:

当您在下拉列表中选择一个选项时,这将导致“重定向”:

onchange 事件添加到select 以更改当前浏览器位置。

将选择选项值更改为页面的 URL。

(然后,您可以将 PHP 标头方向放在 loadPage.php 中。不再需要。)

<select form="theForm" name="selectedPage" 

        onchange="if (this.value) window.location.href=this.value">

  <option value="page_1.php">Page 1</option>
  <option value="page_2.php">Page 2</option>
</select>

Jay Blanchard 在评论部分提出的问题的答案:

这可以在没有内联 JavaScript 的情况下完成吗(为了便于维护和重用能力)?

当然,这也是可能的。例如,使用 jQuery:

$('#SelectId').change(function() { 
    //alert( this.value ); // or $(this).val()
    window.location.href = 'http://' + this.value;
});

http://api.jquery.com/change

或者你可以绑定.on('change')

$('#SelectId').on('change', function() {
    //alert( this.value ); // or $(this).val()
    window.location.href = 'http://' + this.value;
});

不用jQuery你能做到吗?

当然,这也是可能的。您可以使用document.getElementById() 选择元素并将事件处理与addEventListener 绑定。

window.onload = function() { 
    var select = document.getElementById('SelectId');
    var handler = function() {
      if(select.value) {
            window.location.href = 'http://' + select.value;
      }
    };
    select.addEventListener('change', handler, false);
};

【讨论】:

  • 可以在没有内联 JavaScript 的情况下做到这一点(为了便于维护和重用能力)?
  • 当然,这也是可能的。例如,使用 jQuery:$('#SelectId').change(function() { alert( "Handler for .change() called." ); });。见api.jquery.com/change
  • 不用jQuery你能做到吗?
  • 当然。我已经更新了我的答案并添加了一个没有 jQuery 的示例。
  • 太棒了。我问的原因是在我的第一条评论中,因为我试图让人们了解如何避免内联 JS(渐进式增强等)。这是我对您的回答的 +1。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-10
  • 2014-04-10
相关资源
最近更新 更多