TypeError:无法读取null的“已检查”属性

时间:2018-01-23 00:40:24

标签: javascript html node.js

我想要检查html中的ch0复选框,将命令发送到端口。

但代码无法识别节点js中的html元素。

发生错误(typeerror:无法读取属性'checked'为null)

我使用jsdom,但我认为它没有效果

我该如何解决?

-run.js- (module)

module.exports=async function(){

var jsdom = require('jsdom');
var JSDOM = jsdom.JSDOM;
var dom = new JSDOM();
var document = dom.window.document;
console.log('1');

await delay(1000);

var serialport = require('serialport');
var port = new serialport("/dev/ttyACM0",{ autoOpen: false});

port.close(function(){
    delete port ;
});

await delay(1000);

port = new serialport("/dev/ttyACM0" , {baudRate:9600} );

await delay(1000);

var ch0 = document.getElementById('ch0') ;

if (ch0.checked == true ){
    setInterval(() => port.write("enable 15\n"+"mon 0\n"+"meas? 1\n"),1000);
}``

-index.ejs- (html)
<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
<link rel='stylesheet' href='/stylesheets/style.css' />

</head>

<body>
<div style="height: 200px ; border: 1px   solid  blue ; " > 
<input type="checkbox" id="ch0" value="1">ch0

<input type="button" value="start" onclick="start(1)">

</div>
<script src="/socket.io/socket.io.js"></script>
<script type="text/javascript">

    var socket = io.connect();  

    function start(data)
    {
        socket.emit('start');
    }

  </script>
  </body>

1 个答案:

答案 0 :(得分:0)

不是答案,而是重要的观察:

您在此处所做的是在Chromium引擎下创建内存泄漏的最快方法......

 var ch0 = document.getElementById('ch0') ;

您已经拥有该名称的标识符,然后在内存中创建一个指向同名标识符的指针!

所以稍后,如果您决定使用该元素并指定...

Ch0=null;

...以便吸引垃圾收集器处理元素的内存......猜猜什么会被处置?

他们都没有!因为垃圾收集器不知道您指的是哪两个标识符,并且永远无法为您决定。

将来只需直接使用元素的标识符即可。您不需要声明另一个变量来指向它。