【发布时间】:2021-04-18 01:11:51
【问题描述】:
我要做的是将“假日日期:”选择与其下方表格中的“日期”列中的行值进行比较。我试过使用这样的代码:
function dateChk(){
var dt1 = document.getElementById('PHDate').value;
var dt2 = document.getElementById('phdateadd').value;
if (dt1 == dt2) {
alert("This date already assigned, please try again.");
document.getElementById('phdateadd').value = 0;
}
}
但这仅适用于第一行。然后我想到了像这样的数组:
<input id="phdateadd" name="phdateadd" type="date" onchange="myFunction()" required>
<p id="demo"></p>
<script>
var dates= ["2021-01-01", "2021-02-12", "2021-02-13", "2021-04-02", "2021-05-01",
"2021-05-13", "2021-05-14", "2021-05-26", "2021-05-30", "2021-05-31",
"2021-07-06", "2021-07-20", "2021-08-10", "2021-08-31", "2021-09-16",
"2021-10-02", "2021-10-19", "2021-11-04", "2021-12-25"];
function checkDate(date) {
return date == document.getElementById("phdateadd").value;
}
function myFunction() {
document.getElementById("demo").innerHTML = dates.find(checkDate);
var chk = document.getElementById("demo").innerHTML;
if ( chk != "undefined" ) {
alert("This date already assigned, please try again.");
document.getElementById("phdateadd").value = 0;}
}
</script>
这确实有效,但是我必须将该列中的所有日期指定为数组。我有这样的想法,即从 MySQL 查询中传递数据,其日期值的格式类似于数组,但它似乎无法识别。这是查询:
SELECT CONCAT('["',GROUP_CONCAT(phdate SEPARATOR '", "'),'"]') As arrdate FROM table1;
which returns
["2021-01-01", "2021-02-12", "2021-02-13", "2021-04-02", "2021-05-01", "2021-05-13", "2021-05-14",
"2021-05-26", "2021-05-30", "2021-05-31", "2021-07-06", "2021-07-20", "2021-08-10", "2021-08-31",
"2021-09-16", "2021-10-02", "2021-10-19", "2021-11-04", "2021-12-25"]
所以,我将结果显示在页面中:
<% phDates.forEach((phDates, index) => { %>
<tr><td><p id="phdates" name="phdates" value="<%= phDates.arrdate %>"><%= phDates.arrdate %>
<% }) %></p><p id="demo" name="demo">b</p><br><p id="demo1" name="demo1">a</p></td></tr>
<script>
var dates = document.getElementById("phdates").innerHTML;
document.getElementById("demo").innerHTML = dates;
</script>
您可以看到来自 MySQL 查询的 arrdate 值和 demo 显示类似的格式。当我在var dates 中指定数组时,demo 的值是不同的(就像在我上面的 sn-p 中一样):
如果我故意让 MySQL 返回数据,尽管它仍然无法识别它。我认为如果这种方法可行,我什至不需要将所选日期与表中的列进行比较。我使用$( "div" ).toArray() 进行了测试,但我也无法让它工作。
我认为这对我来说可能是直接的解决方案,但我想知道如何格式化 MySQL 结果值以与正确的 javascript 数组格式相对应?或者保持 MySQL 输出不变并将该值转换为 javascript 数组兼容值。我不禁想到解决方案可能很简单,但我一直在寻找几天,但我没有找到任何解决方案。
【问题讨论】:
-
你的 sn-p 工作得很好......
-
是的@AntonyJack,但如果我指定(硬编码)数组。我想使用 MySQL 查询结果中的日期数据列表。简而言之,我只想要一个动态的值数组,而不是对其进行硬编码。
-
<%...%>标签是怎么回事?您使用的是 ASP 或 PHP,还是其他一些服务器端语言?看起来您输出日期的循环正在生成多个带有id="phdates"的<p>标签,这是非法的HTML(ids 必须是唯一的)。 -
@kmoser 更新了标签。我没有包含
node.js和ejs(<%...%>) 标签,因为我认为我的问题是关于“如何从 MySQL 查询输出到 html 并被识别为 javascript 数组”。对于那个很抱歉。我的工作代码与 sn-p 中的完全一样。其他只是我所做的额外测试,我的代码中没有任何<p>(或其他)标签与重复的id。 -
由于您已经获取数据并显示到您的表格中,因此无需以数组的形式再次获取它们。您在循环中使用静态元素 ID,这很糟糕;用类名更改这些 ID。为了让您的
dateChk工作,您需要将PHDate元素的ID 替换为类,然后在dateChk中查询所有PHDate类元素(使用document.querySelectorAll('.PHDate')) 并比较每个日期,直到找到匹配项或循环结束。
标签: javascript mysql node.js arrays ejs