javascript - Electron 事件多次触发

标签 javascript electron

我有一个页面,通过 jquery 加载新元素。我的页面有事件监听器,例如

ipcRenderer.send('getlist');
ipcRenderer.once('return:list', function (e, l, wn) {
    console.log('a');
    for(let i = 0; i < l.length; i++) {
        $('.a').append('<div>'+l[i]+wn[i]'</div>');
    }
    $('.a').append('<div>End</div>');
});

将数据发送到页面的代码:

ipcMain.on('getlist', function (e) {
    wn = [];
    cfg['a'].forEach(s => {
        wn.push(yaml.readSync('charcfg.yaml')['name']);
    });
    mainWindow.webContents.send('return:list', cfg['a'], wn);
});

它工作得很好,直到我加载另一个页面,然后再次加载此页面。 该事件会多次触发。每次我返回此页面时,都会出现更多次。

我尝试使用

ipcRenderer.once('someevent', function(e, l){...}); 

它只能运行一次。第三次重新加载时,它会再次启动多次监听器。

使用此脚本的代码会随页面一起加载!

抱歉我的英语不好。 Output

通过jquery加载页面的函数:

const htmlContent = $('.content');
function setContent(s) {
    $('.content').animate({
        opacity: 0
    }, 200, function () {
        setTimeout(function () {
            htmlContent.load(s + '.html');
            $('.content').animate({
                opacity: 1
            }, 200);
        }, 100);
    });
}

最佳答案

实际上有两个听众去了两次。

绑定(bind)到加载按钮的 ipcRenderer.on (替换为 .once)和 jquery.on('click')页。使用 jquery.unbind().on('click') 修复了此问题。

感谢您的帮助,obermillerk。

关于javascript - Electron 事件多次触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50891426/

相关文章:

node.js - 如何从浏览器链接启动/关注 Electron 应用程序?

javascript - 这会是没有 static 关键字的 javascript 的一个很好的替代品吗?

javascript - 如何在prototype.object上正确绑定(bind) 'this'上下文?

javascript - 如何在D3中模拟鼠标移动,以便当您拖动节点时,其他节点会自动移动?

javascript - 如何在Electron主js脚本中调用Webpack捆绑的函数

node.js - 实现express js时,Electron JS出现错误

javascript - 找不到模块 'drivelist' 的声明文件

javascript - 在 ExtJS 3 中呈现自定义单选按钮

javascript - Jquery stopPropagation 不起作用,两种情况

javascript - FontAwesome 无法在本地和 Electron 应用程序中加载字体