为什么addEventListener在Node.js的jsdom模块中不起作用

时间:2018-10-31 16:43:54

标签: javascript node.js jsdom

在单击页面上的某个元素后,我使用以下代码调用一些东西

var http = require('http');
var fs = require('fs');
var jsdom = require('jsdom');

http.createServer(function(req, res) {

    res.writeHead(200, {'Content-Type': 'text/html; charset=utf8'});
    var document = new jsdom.JSDOM('<!doctype html><html><head></head><body><p>Text</p></body></html>').window.document;
    document.getElementsByTagName('p')[0].addEventListener('click', function() {
        alert('OK');
    });     
    var page = '<!doctype html><html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>';
    res.end(page);

}).listen(80, 'localhost');

但是,如果我单击该段落,则什么也没发生

我通过链接https://stackoverflow.com/a/36804251/10587062阅读了答案,但我不知道如何解决问题

1 个答案:

答案 0 :(得分:4)

您正在将click处理程序挂在服务器上,但是您要单击客户端上的元素。

相反,您需要向客户端发送脚本代码,以将事件处理程序挂接到浏览器呈现的DOM元素上,以处理单击并显示警报(这也是客户端的事情)。 (这意味着您不需要JSm;这是为了在服务器端进行DOM操作-例如Web抓取)。