如何在函数中从#input1派发自定义事件?dispatchEvent报错排查
解决Wix元素调用dispatchEvent报错的问题
你用$w('#input1')获取的是Wix封装的组件对象,不是原生DOM元素,所以没有dispatchEvent方法,这就是报错的原因。
要解决这个问题,需要先通过Wix元素的getNode()方法获取对应的原生DOM节点,再在这个原生节点上派发自定义事件:
修改后的代码如下:
export function captcha1_verified() { $w('#input1').show(); const myEvent = new CustomEvent("myevent", { detail: {}, bubbles: true, cancelable: true, composed: false, }); // 获取input1的原生DOM节点 const inputDom = $w('#input1').getNode(); // 在原生节点上派发事件 inputDom.dispatchEvent(myEvent); }
如果需要监听这个自定义事件,同样要在原生DOM节点上添加监听:
$w('#input1').onReady(() => { const inputDom = $w('#input1').getNode(); inputDom.addEventListener('myevent', (e) => { // 这里写事件处理逻辑 console.log('自定义事件触发', e.detail); }); });
注意:调用getNode()前要确保元素已经完成渲染,show()方法执行后元素会被渲染,所以这里没问题;如果是动态创建的元素,最好放在onReady回调里执行。
内容的提问来源于stack exchange,提问作者Cesar
相关产品推荐
相关产品推荐

