我想要检查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>
答案 0 :(得分:0)
不是答案,而是重要的观察:
您在此处所做的是在Chromium引擎下创建内存泄漏的最快方法......
var ch0 = document.getElementById('ch0') ;
您已经拥有该名称的标识符,然后在内存中创建一个指向同名标识符的指针!
所以稍后,如果您决定使用该元素并指定...
Ch0=null;
...以便吸引垃圾收集器处理元素的内存......猜猜什么会被处置?
他们都没有!因为垃圾收集器不知道您指的是哪两个标识符,并且永远无法为您决定。
将来只需直接使用元素的标识符即可。您不需要声明另一个变量来指向它。