getElementByID保持返回undefined

问题描述 投票:1回答:3

我目前得到标题中显示的错误,我试图解决问题与stackoverflow上找到的众多解决方案,但尚未有任何工作,任何建议/帮助将不胜感激。

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title> Donor Request </title>
  </head>
  <body>
    <form>
      <div>
        <label> Blood Type </label>
        <input type="text" name="" id="bloodType" value="">
        <label> Location </label>
        <input type="text" name="" id="Location" value="">
      </div>
      <button type="submit" name="button"> Request </button>
    </form>
  </body>
  <script type="text/javascript">

      const { ipcRenderer } = require('electron').remote;

      const form = document.querySelector('form')

      form.addEventListener('submit', submitForm);

      window.onload = function(){
        const bloodType = document.getElementById("bloodType").value;
      }

      function submitForm(e){
        e.preventDefault();
        console.log("working");
        console.log(bloodType, "working");
        ipcRenderer.send('Request:bloodType', bloodType);
    }

  </script>
</html>
javascript html html5 dom electron
3个回答
0
投票

bloodType声明为onLoad之外的varlet,使其可以在另一种方法中使用,或者从submitForm内部获取。

function submitForm(e){
    const bloodType = document.getElementById("bloodType").value;
    e.preventDefault();
    console.log("working");
    console.log(bloodType, "working");
    ipcRenderer.send('Request:bloodType', bloodType);
}
let bloodType;

window.onload = function(){
    bloodType = document.getElementById("bloodType").value;
}

function submitForm(e){
    e.preventDefault();
    console.log("working");
    console.log(bloodType, "working");
    ipcRenderer.send('Request:bloodType', bloodType);
}

1
投票

当你使用const时,你的变量将被限制在它声明的函数范围内。这意味着您无法在bloodType回调函数之外访问window.onload

相反,一个可能的解决方案可能是使bloodType成为一个全局变量,然后在你的onload回调中设置它的值,如下所示:

let bloodType;
window.onload = function(){
  bloodType = document.getElementById("bloodType").value;
}

这样,您可以通过所有功能访问bloodType,只需要查询DOM一次。


0
投票

正如其他人所提到的,你需要使用bloodTypewindow.onload函数在let函数之外定义submitForm

function submitForm(e) {
  let bloodType = document.getElementById("bloodType").value;

  e.preventDefault();
  console.log("working");

  console.log(bloodType, "working");
  ipcRenderer.send('Request:bloodType', bloodType);
}

这里有趣的是你在bloodType中使用的submitForm变量不会引发参考错误。因为bloodType指的是id=bloodType的实际输入元素。

如果你有一个元素

<div id="example">some text</div>

example.innerHTML返回some text而无需手动创建let example = document.getElementById("example")变量

所以,如果你用你现有的代码做bloodType.value,那就行了。但是,你应该使用document.getElementById("bloodType").value

更多信息:Do DOM tree elements with ids become global variables?

© www.soinside.com 2019 - 2024. All rights reserved.