javascript - 无法将日期范围插入多个选择选项标签
问题描述
<?php
require_once('dbconfig.php');
$sql = "SELECT * FROM kpi_detail";
$result = $conn->query($sql);
while($row = $result->fetch_assoc()){
?>
<tbody>
<tr id="<?php echo $row['id'] ?>">
<td><?php echo $row['id'] ?></td>
<td><?php echo $row['kpi_name'] ?></td>
<td><?php echo $row['target'] ?></td>
<td><?php echo $row['current_data'] ?></td>
<td><input type="text" id="dt1" value="<?php echo $row['start_date'] ?>"></td>
<td><input type="text" id="dt2" value="<?php echo $row['end_date'] ?>"></td>
<td><button type="submit" onclick="SubmitDate();">Save</button></td>
<td><select name="DateList"><option selected>Select date</option></select></td>
</tr>
</tbody>
<?php } ?></table>
<script type="text/javascript">
var startDate = new Date($('#dt1').val()); //YYYY-MM-DD
var endDate = new Date($('#dt2').val()); //YYYY-MM-DD
console.log($('#dt1').val());
var getDateArray = function(start, end) {
var arr = new Array();
var dt = new Date(start);
while (dt <= end) {
arr.push(new Date(dt));
dt.setDate(dt.getDate() + 1);
}
return arr;
}
var dateArr = getDateArray(startDate, endDate);
var sel = document.querySelector("select[name='DateList']");
for (var i = 0; i < dateArr.length; i++) {
var opt = document.createElement('option');
opt.innerHTML = dateArr[i].toLocaleDateString("en-US");
opt.value = dateArr[i].toLocaleDateString("en-US");
sel.appendChild(opt);
}
</script>
在我插入第一个数据并在表单中选择开始日期和结束日期后,开始日期和结束日期的值将存储在日期 Arr JavaScript 变量中。如果我在表单中插入另一个数据并选择开始日期和结束日期,则以后的第二个数据将不会收到开始日期到结束日期的日期。需要一个解决方案来获取我选择的每个日期值并插入选择选项值。 在此处输入图像描述 在此处 输入图像描述
解决方案
在您的 PHP 中:
<td>
<input type="text" class="startDate" value="<?php echo $row['start_date'] ?>">
</td>
<td>
<input type="text" class="endDate" value="<?php echo $row['end_date'] ?>">
</td>
在你的 JS 中:
var getDateArray = function (start, end) {
var arr = new Array();
var dt = new Date(start);
end = new Date(end);
while (dt <= end) {
arr.push(new Date(dt));
dt.setDate(dt.getDate() + 1);
}
return arr;
};
$("tr").each(
function (index) {
var startDate = $(this).find('.startDate').attr('value');
var endDate = $(this).find('.endDate').attr('value');
var dateArr = getDateArray(startDate, endDate);
var sel = $(this).find("select[name='DateList']");
for (var i = 0; i < dateArr.length; i++) {
var value = dateArr[i].toLocaleDateString("en-US");
var opt = new Option(value, value);
sel.append(opt);
}
}
);
您的代码中有几个问题需要解决:您不应该对不同的元素使用相同的 ID。tbody 元素也应该在循环之外。
推荐阅读
- javascript - 在 Nodejs 上运行,如何将数据从 JS 文件发送到 HTML——需要关于所有 diff 模块的建议
- carplay - 如何识别用户何时点击容器?(车载)
- dc.js - 如何在动态增长的数据集上应用刷牙?
- mysql - Mysql 数据库无法在 XAMPP for Mac 中启动
- sql - 是否可以创建可用于 sql 查询的扩展方法?
- sql - SQLite GROUP BY 索引较慢
- python - 如何在给定特定规则集的情况下拆分字符串?
- r - 通过 Shiny App 中的操作按钮更新 DataTable 中的单个单元格
- node.js - 无法在我的 Aurelia 应用程序中使用 npm 'request' 包
- javascript - 将变量复制到剪贴板会创建一个我不需要的文本框