【问题标题】:How to use JS to hold a variable from a PHP form before submit如何在提交前使用 JS 保存 PHP 表单中的变量
【发布时间】:2020-08-26 20:55:41
【问题描述】:

我对 PHP 还很陌生,所以很抱歉没有完全了解代码结构。

在一个 PHP 文件中,我有一个表单,其中包含从数据库查询中填充的下拉菜单中的选项(锦标赛的轮数取决于参赛者的数量)。一旦用户选择了一轮夹具的选项,他们希望查看该选项作为变量传递,以确定提交表单时显示的内容。在表单上提交页面的其余部分更改以显示数据库中与用户从下拉列表中选择的回合相关的夹具。

我的挑战是,从下拉菜单中选择轮数后,我必须单击提交按钮两次 - 一次分配变量,然后第二次按下提交才能将变量用作从数据库中显示灯具信息的过程。

我知道可以使用 JS 存储一个变量,然后可以在表单提交时使用,但我不确定如何将它与表单 / 的编写方式集成。

查看网络上的一些地方(如 W3Schools)后,我有一些基本的 JS 并尝试过,但我认为用户选择和存储准备在提交时使用的变量之间仍然存在脱节点击。

//Basic JS
<script>
function getFormIndex() {
  document.getElementById($_POST['roundselect']).innerHTML =
  document.getElementById("roundselect").selectedIndex;
}
</script>

//PHP Elements

if(isset($_POST['submit'])){

$roundnum = $_POST['roundselect']; }

<?php
function setround(){

    $roundnum = $_POST['roundselect'];
    echo $roundnum;        
    }
?>  

//Form

<div class="h2_select">
                <?  if($fnum) { 
                    $select_opt = (isset($_GET['round'])) ? $_GET['round'] : 1;                 
                ?>
                    <form method="post" action="/tournaments/<?=$lid; ?>/fixtures/<?= $roundnum; ?>" name="rf">
                        <!--<input type="hidden" name="id" value="/<?=$lid; ?>" />
                        <input type="hidden" name="page" value="/fixtures" /> -->


                            <span class="minput">Select Round
                            <select size=1 class="mselect"  name="roundselect" onChange=getFormIndex();>
                                <? for($i=1; $i <= $total_rounds; $i++) { ?>
                                    <option value="<?= $i ?>" <?php if($i == $select_opt){ echo 'selected'; } ?> > <?= $i?> </option>
                                <? }
                                ?>
                            </select>&nbsp;
                            <input type="submit" name="submit" value="<?= $lang[185] ?>" class="minput"/>
                    </form>              
                <? } ?>
            </div>

为了确认,表单可以正常工作并显示正确的信息。问题是我目前需要点击“提交”两次。

谢谢

【问题讨论】:

  • 谢谢@Teemu - 我很感激这些信息!我会确保在代码的其他地方更新所有这些内容。
  • @Teemu 虽然有理由不使用短开放标签,但它们并没有被弃用。有一个建议要弃用它们,最初被接受,但后来指出该方法存在严重问题,结果被逆转。 (我不会将这些讨论联系起来,因为它们被捆绑在一大堆政治和个人差异中,但据我了解,这是关键结果。)
  • @IMSoP 好的,感谢您提供的信息。貌似这个也更新到手册里了。

标签: javascript php


【解决方案1】:

好的开始,我会用一点 AJAX 来做,它允许我们“在后台”发送请求并接收答案 - 这样当用户第一次更改选择时,我会在后台从后端获取数据并无需重复提交即可显示。

请检查这个帖子 - 我认为它说明了同样的事情;

How to Submit Form on Select Change

它基于 JQuery,我认为它对于新开发人员来说是一个好的开始。

但是 - 如果你不想使用框架并且不关心旧浏览器,你可以使用带有 Fetch (https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) 和 onchange https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/change_event的“vanilla”Javascript

Fetch 会返回结果,因此您必须将其传递回网站。

很容易做到这一点: 1.在你的页面上设置一个div并为其添加一个唯一的ID(如) 2. 使用 document.getElementById("result").innerHTML = resultFromFetch;

所以:

  1. 在选择时收听 onchange
  2. 选择更改时从后端获取
  3. 显示抓取结果

AJAX 非常简洁,非常适合用户体验,因为它允许我们在应用程序的“后台”异步获取数据。但是,同时显示一些“请等待”指示并确保显示一些潜在错误(在等待结果时连接可能会“断开”,然后向用户显示错误是明智的),这是一个很好的用户体验措施他们永远在等待)。

希望这有助于为您指明新的退出方向。

【讨论】:

  • 谢谢@nettutvikler - 我查看了 Fetch 文档和 onChange 并尝试实现它,但我对这种方法的主要问题是 - 你是否建议使用它来替换实际的“提交”部分表单和数据库中的结果是否显示在
    中?另外,我将如何使用您的建议来设置变量?谢谢
  • 1.) PHP 生成表单,其中包含从数据库查询中填充的下拉菜单中的选项 2.) 然后您使用更改并获取“用户已选择一个选项”的 javascript 解决方案...该选项作为变量传递以确定要显示的内容” - 不需要提交(onchange 在这里工作),3.)AJAX 通过 PHP 从后端获取数据从 DB 获取数据,然后我们可以提交表单应该解决“从下拉菜单中选择轮数后,我必须单击提交按钮两次” - 实际上 onchange 可以作为没有 javascript 的提交。
猜你喜欢
相关资源
最近更新 更多
热门标签