javascript - 如何在提交前使用 JS 保存 PHP 表单中的变量
问题描述
我对 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>
<input type="submit" name="submit" value="<?= $lang[185] ?>" class="minput"/>
</form>
<? } ?>
</div>
为了确认,该表格可以工作并显示正确的信息。问题是我目前需要点击“提交”两次。
谢谢
解决方案
好的开始,我会用一点 AJAX 来做,它允许我们“在后台”发送请求并接收答案 - 这样当用户第一次更改选择时,我会在后台从后端获取数据并显示它需要双重提交。
请检查这个线程 - 我认为它说明了同样的事情;
它基于 JQuery,我认为这对新开发人员来说是一个好的开始。
但是 - 如果您不想使用框架并且不关心旧版浏览器,您可以只使用带有 Fetch 的“vanilla”Javascript(https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API ) 和 onchange https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/change_event
Fetch 返回结果,因此您必须将其传递回网站。
这样做很容易: 1. 在您的页面上设置一个 div 并为其添加一个唯一 ID(如) 2. 使用 document.getElementById("result").innerHTML = resultFromFetch;
所以:
- 听 onchange on select
- 选择更改时从后端获取
- 显示抓取结果
AJAX 非常简洁,非常适合用户体验,因为它允许我们在应用程序的“后台”异步获取数据。但是,同时显示一些“请等待”指示并确保显示一些潜在错误(在等待结果时连接可能会“断开”,然后向用户显示错误是明智的)他们永远等待)。
希望这有助于为您指明一个新的退出方向。
推荐阅读
- javascript - How to accelerate ajax http request using Greasemonkey?
- angular - Angular 单元测试:访问模板变量
- python - Numpy 元素乘法(意外的整数溢出)
- hex - How to read an escpos guide?
- python - 在 filter() 中使用 has_key() 的最快方法是什么?
- flask-socketio - 如何在 python-rq 中立即获取输出?
- excel - 带有表单数据的 VBA 发布请求(URL 不变)
- php - Webfonts 没有在 Cloudfront 上缓存
- git - 在 IntelliJ/PyCharm 中删除 git 远程
- git - 运行`git filter-branch`时`致命:不明确的参数`