javascript - 获取选中的复选框数组,并且仅当以特定顺序选择时,然后转到 URL
问题描述
第一次在这里问。我为此尝试了许多主题,我目前使用复选框代码,但它用于收集到邮件表单并通过 php 发送给我。我似乎无法准确找到以下场景所需的内容。
我正在修改一些 Flash 拼图,使其全部为 html 和 javascript(或 jquery)。一个谜题要求玩家输入密码(打开保险箱)。在 Flash 中,他们单击带有代码符号的按钮,所以我认为,显示为图像的复选框可以工作......
我有 9 个复选框。每个都有一个从 1 到 9 的值。在布局中它们混合在一起(它们没有按顺序放置在页面上),我使用图像来表示复选框。
我想知道是否所有的框都被选中,以及它们是否按照 1-9 的确切顺序被选中。
如果复选框根据其值(1、2、3、4、5、6、7、8、9)以正确的顺序选中,则单击提交按钮时,播放器将被带到下一个网页。
我也可以使用名称或 ID 来执行此操作,无论是否可行。或 php。我希望保持简单,因为我不熟悉 javvy。我可能知道足以对自己和他人造成危险:)
在此先感谢您提供的任何帮助,或指向可以为我指明正确方向的主题的链接。
这是我的html代码。
<form name="checklist" method="post" action="My-Page.php">
<label>
<input type="checkbox" value="8">
<img src="btn_8.png"></label>
<label>
<input type="checkbox" value="3">
<img src="btn_3.png"></label>
<label>
<input type="checkbox" value="9">
<img src="btn_9.png"></label>
<label>
<input type="checkbox" value="2">
<img src="btn_2.png"></label>
<label>
<input type="checkbox" value="5">
<img src="btn_5.png"></label>
<label>
<input type="checkbox" value="4">
<img src="btn_4.png"></label>
<label>
<input type="checkbox" value="7">
<img src="btn_7.png"></label>
<label>
<input type="checkbox" value="1">
<img src="btn_1.png"></label>
<label>
<input type="checkbox" value="6">
<img src="btn_6.png"></label>
<input type="submit" value="Open">
</form>
这是我发现的获取值的 js,但我不知道如何使其以特定顺序获取值,然后转到 URL,或提醒用户注意错误。
var array = []
var checkboxes = document.querySelectorAll('input[type=checkbox]:checked')
for (var i = 0; i < checkboxes.length; i++) {
array.push(checkboxes[i].value)
}
更新。我为此苦苦挣扎,最后请朋友帮忙。我花了 8 天的时间,他只用了 1 个小时,从头开始。
我非常感谢那些花时间给我一些提示的人,这个网站非常适合学习。
解决方案
这是在 JavaScript 中执行此操作的一种方法。您维护一个selected
数组,您可以在单击复选框时添加或删除项目。然后,当表单被提交时,你会做一些检查:首先你看看是否所有的框都被选中了。接下来,您查看selected
数组中的所有数字是否按顺序排列。
const form = document.querySelector("#form");
let selected = [];
const numberOfCheckboxes = document.querySelectorAll("#form input").length;
form.addEventListener("click", function(e) {
if (e.target.nodeName !== "INPUT") return;
if (e.target.checked) {
selected.push(parseInt(e.target.value));
} else {
selected = selected.filter(el => el != e.target.value);
}
})
function check(e) {
console.log(selected);
if (selected.length !== numberOfCheckboxes) {
e.preventDefault();
alert("You didn't select all the boxes");
}
const inOrder = selected.every((el, i, arr) => i === 0 || el === arr[i-1] + 1);
if (!inOrder) {
e.preventDefault();
alert("Wrong order!");
}
}
<form id="form" onsubmit="return check(event)">
<label>
<input type="checkbox" value="1" /> 1
</label>
<label>
<input type="checkbox" value="2" /> 2
</label>
<label>
<input type="checkbox" value="3" /> 3
</label>
<button>submit</button>
</form>
推荐阅读
- c# - C# - 从属性名称中带有“系统”的 JSON 对象中提取值
- text - 想要在 VS Cose 中使所有文本变黑
- java - 使用 java itext 或 pdfbox 在现有 pdf 中添加便签
- winapi - winapi - DeferWindowPos 和 InvalidateRect
- javascript - 页面未在 React.js 中显示
- javascript - 当我从模态中选择“是”选项时如何取消选中复选框?
- javascript - 反应:检测画布上按下的删除键
- php - 如何在 Windows 上从命令提示符更新 php cli 版本?
- jmeter - 在 JMETER 中记录按钮响应
- ruby - ruby 中解析 2020-W9 日期的好方法是什么