【问题标题】:How come an input date only seems to fire the function once you've clicked out of the input?为什么输入日期似乎只有在您单击输入后才会触发该功能?
【发布时间】:2019-08-10 12:28:23
【问题描述】:

我有一个接受用户输入日期的表单。我的目标是,一旦日期从空字符串变为实际填写,底部(为了继续填写表格)就会显示。我已经成功地使这成为可能,但是该功能似乎仅在用户单击输入后才运行。我希望能够做到这一点,这样用户就不必单击它,并且只要输入日期值更改它就会运行。我目前正在使用 Chrome,这还没有给我带来任何问题。

我尝试过使用带有 change 和函数的 addEventListener,我尝试过其他 html dom 事件,例如 onchange、oninput、onfocus 等,但它们似乎只有在用户点击后才会运行。我的下一个尝试是杰瑞操纵它并专注于设置超时......你有什么想法?

JS 和 HTML

function inputTodayDate(){

  let inputDate = document.getElementById("today");
  let todayRecord = document.getElementById('date').value;

  if ( todayRecord === '') {
  inputDate.style.display = "none";}
  else{
    inputDate.style.display = "block";
  }
}
<input type="date" id='date' onfocus="inputTodayDate"> <label for='date' > Today's Date </label>
<p>
<div id="today">
<input type="amount" size=25 Placeholder="How much did you spend today?" id="spent" name="today" required>
<select id="moneySpent" onchange='checkOnWhat(this.value);' name="today" required>
  <option> Groceries</option>
  <option>Going out</option>
  <option>Bills</option>
  <option>Other</option>
</select>
<input type="text" name="whatOn" id="whatOn" style='display:none;' name="today" required />
<p>
  <input type="button" value="confirm" onClick="deductFromTotal()" name="today">

  <h3 name="today"> Today's Spending: </h3>
  <div id="listTotalSpent" name="today"></div>
  <h2 id="totalSpent" name="today"></h2>

<p>
<input type='button' value= 'record' onClick= "storeWhen(); inputTodayDate()" name="today">
</p>
</div>

【问题讨论】:

  • 不要在多个元素中为 nameid 使用相同的值。原因是历史性的。
  • 注意,谢谢!

标签: javascript html date events input


【解决方案1】:

您可以使用 mouseup 和 keyup 事件来实现这一点..

let $inputField = document.getElementById("date");
let callback = function () {
  let inputDate = document.getElementById("today");
  let todayRecord = document.getElementById('date').value;

  if ( todayRecord === '') {
  inputDate.style.display = "none";}
  else{
    inputDate.style.display = "block";
  }
}
$inputField.oninput= callback;

【讨论】:

  • Uncaught TypeError: Cannot set property 'onkeyup' of null Uncaught TypeError: Cannot set property 'onmouseup' of null 此代码带回了这些错误...
  • 哦,请确保在加载 html 后运行脚本。因此,要么在 html 的末尾添加脚本标记,要么将 javascript 代码包装在以下内容中:
  • window.onload = function () { /* code from my answer goes here */ } 为什么?它不能在 $inputField 上设置属性,因为当我们试图通过它的元素 id 获取时,它还不存在。因为浏览器还没有加载到 DOM 中。将 javscript 放置在上面的代码中,我们确保脚本仅在浏览器中加载整个 HTML 后运行。另外,我更新了我的答案,因为 input 事件对此更好。
  • 我最终做了一些非常简单的事情,我只是将脚本移到了
猜你喜欢
  • 2020-11-08
  • 1970-01-01
  • 2022-01-14
  • 2012-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-29
  • 1970-01-01
相关资源
最近更新 更多