javascript - 如何遍历每个 div 的 div
问题描述
撇开可怕的标题不谈,我目前有一个动态表单,其中包含任务,每个任务,状态。任务的数量和状态可能会有所不同。我要做的是提交与该状态相关的任务名称、状态名称和颜色。
<form>
<div class='task'>
<input type="text" name="taskName[]" value="Task name">
<input type="text" name="status[]" class="pill gray" value="Status name">
<input type="text" name="status[]" class="pill blue" value="Status Name">
<input type="text" name="status[]" class="pill orange" value="Status Name">
<button>Add Status</button>
</div>
<div class='task'>
<input type="text" name="taskName[]" value="Task name">
<input type="text" name="status[]" class="pill red" value="Status name">
<input type="text" name="status[]" class="pill yellow" value="Status Name">
<button>Add Status</button>
</div>
<button>Add Task</button>
</form>
我通过 js 提交表单,唯一不同的是从颜色创建一个数组。
let colors = [];
for (let i = 0; i < tasks.length; i++) {
const element = statuses[i];
let pills = element.querySelectorAll('.pill');
pills.forEach(element => {
colors.push([element.classList[1]]);
});
}
// Submit form
formData = new FormData(form);
formData.append("colors", colors);
// Ajax to php
在 php 页面上,我可以遍历任务,但我不确定如何遍历与该任务相关的状态。当前,每个任务都显示所有状态。
$taskName_array = isset($_POST['taskName']) ? $_POST['taskName'] : array();
$colors_array = isset($_POST['colors']) ? $_POST['colors'] : array();
$colors_array = explode(',', $colors_array);
// This outputs:
// Array
// (
// [0] => Gray
// [1] => Blue
// [2] => Orange
// [3] => Red
// [4] => Yellow
// )
$total_rows = count($taskName_array);
for ($i = 0; $i < $total_rows; $i++) {
echo $taskName_array[$i];
// Begin loop through status (Expecting not all statuses just the ones in the same div)
for ($a = 0; $a < $colors_array ; $a++) {
// I'm aware this would echo all the colors (not what I want) vs just the corresponding colors.
echo $colors_array[$a];
}
}
预期结果将类似于“Task1-gray, blue, orange | Task2-red, yellow” 如果不清楚或者您需要更多,请告诉我。
解决方案
实现此目的的一种方法是添加隐藏输入并为其分配颜色值。IE
<div class='task'>
<input type="text" name="taskName[]" value="Task name">
<input type="hidden" name="colors[]">
<!--all same..-->
<button>Add Status</button>
</div>
<div class='task'>
<input type="text" name="taskName[]" value="Task name">
<input type="hidden" name="colors[]">
<!--all same..-->
<button>Add Status</button>
</div>
然后,在您的javascript代码中,当您遍历pill
输入时,您可以在相应的输入中添加颜色值,即:
let colors = [];
let tasks = document.querySelectorAll('.task');
for (let i = 0; i < tasks.length; i++) {
//loop thrugh pill inside that div
tasks[i].querySelectorAll('.pill').forEach(element => {
colors.push(element.classList[1]);
});
tasks[i].querySelector("[name='colors[]']").value = colors //assign value to hiden input
colors = [] //empty array
}
//other codes..ajax..call .
快速演示:
let colors = [];
let tasks = document.querySelectorAll('.task');
for (let i = 0; i < tasks.length; i++) {
//loop thrugh pill inside that div
tasks[i].querySelectorAll('.pill').forEach(element => {
colors.push(element.classList[1]);
});
tasks[i].querySelector("[name='colors[]']").value = colors
colors = []
}
//other codes..ajax..etc
<form name="forms">
<div class='task'>
<input type="text" name="taskName[]" value="Task name">
<!--for demo..change type="hidden"-->
<input type="text" name="colors[]">
<input type="text" name="status[]" class="pill gray" value="Status name">
<input type="text" name="status[]" class="pill blue" value="Status Name">
<input type="text" name="status[]" class="pill orange" value="Status Name">
<button>Add Status</button>
</div>
<div class='task'>
<input type="text" name="taskName[]" value="Task name">
<input type="text" name="colors[]">
<input type="text" name="status[]" class="pill red" value="Status name">
<input type="text" name="status[]" class="pill yellow" value="Status Name">
<button>Add Status</button>
</div>
<button>Add Task</button>
</form>
最后,在您的后端页面中,您可以简单地使用获取该值$_POST['colors']
,您可以将其分解或直接通过echo显示它们。IE:
$taskName_array = isset($_POST['taskName']) ? $_POST['taskName'] : array();
$status = isset($_POST['colors']) ? $_POST['colors'] : array();
$total_rows = count($taskName_array);
for ($i = 0; $i < $total_rows; $i++) {
echo $taskName_array[$i] ."\n";
echo $status[$i];
}
推荐阅读
- php - 在日期和时间 symfony 之后重定向
- express - 对 nodejs 或 expressjs 项目使用加特林?
- javascript - Material UI 的 CardHeader 动作样式
- python - 在新版本的 matplotlib 中使用 twinx 时定义纵横比
- vue.js - 如果使用全局 mixin head() 方法,则 Nuxt asyncData 结果未定义
- mysql - 适用于 php 5.6 的查询不会在 php 7 上引发错误
- c# - 如何禁用 DropShadow 或 ContentDialog 的任何阴影?UWP、XAML
- google-analytics - Google Analytics - 细分/过滤视图 - 基于自定义属性
- python - 在 pyqt 中将 Worker 对象移动到 QThread 之前设置信号和槽
- node.js - 为什么我在快递中处理的 cors 不起作用?