AppJS窗口调整大小后按钮点击事件失效怎么办?

迷人的殿原 阅读 51

折腾了一下午AppJS,遇到个怪问题。我用app.window创建窗口后,给按钮绑定了点击事件,正常显示时能触发。但只要在窗口resize事件里调整过大小,按钮就完全没反应了。

代码是这样写的:


const win = app.window.create('index.html', { width: 800, height: 600 });
win.on('resize', () => {
  win.setSize(win.width + 100, win.height); // 调整大小后问题出现
});

document.querySelector('#myButton').addEventListener('click', () => {
  alert('点击了'); // 这个提示在窗口调整后无法弹出
});

我试过把事件绑定移到resize回调里,也试过用app.once('ready')包裹,但控制台一直报Cannot read properties of null。是不是窗口重绘后DOM被重置了?有没有什么稳妥的绑定方式?

我来解答 赞 11 收藏
二维码
手机扫码查看
2 条解答
 ___梓晴
问题出在resize里调用setSize会重建窗口上下文,DOM被重新加载了,之前的事件监听器全丢。

用事件委托搞定,把点击事件绑到document上:

document.addEventListener('click', (e) => {
if (e.target.id === 'myButton') {
alert('点击了');
}
});


resize回调里别用setSize,用CSS或win.setContentSize试试。
点赞
2026-03-10 21:05
春芳
春芳 Lv1
你这个是窗口resize时DOM可能还没准备好,事件绑定被清掉了。直接在resize回调里用setTimeout延迟绑定就行。

win.on('resize', () => {
setTimeout(() => {
const btn = document.querySelector('#myButton');
if (btn) btn.click(); // 或重新绑定
}, 100);
});


或者干脆把事件绑定逻辑抽成函数,在页面load和resize后都调一次,差不多就行。
点赞 5
2026-02-12 12:10