我有一个页面,通过 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/