不修改子窗口源码,向其触发keyup事件失败问题排查
问题排查与解决
问题原因
父窗口和子窗口的jQuery是完全独立的实例——你在子窗口中用自身的jQuery绑定了keyup事件,但在父窗口中调用自身的$('#search', w.document).trigger()时,父窗口的jQuery无法识别子窗口jQuery绑定的事件处理函数,导致触发失败。
解决方案1:使用子窗口的jQuery实例操作
直接调用子窗口的$对象来操作元素和触发事件,确保和绑定事件的jQuery实例一致:
修改test.html中的脚本部分:
$(document).ready(function(){ var w=window.open("search.html","_blank"); w.onload = function(){ setTimeout(() => { // 用子窗口的jQuery对象操作 w.$('#search').val("test"); w.$('#search').trigger("keyup"); }, 5000); } });
解决方案2:触发原生DOM事件
绕开jQuery实例差异,直接通过DOM API创建并触发原生keyup事件,jQuery绑定的事件会自动响应原生事件:
修改test.html中的脚本部分:
$(document).ready(function(){ var w=window.open("search.html","_blank"); w.onload = function(){ setTimeout(() => { const searchInput = w.document.getElementById('search'); searchInput.value = "test"; // 创建原生keyup事件并触发 const keyupEvent = new KeyboardEvent('keyup', { bubbles: true, cancelable: true }); searchInput.dispatchEvent(keyupEvent); }, 5000); } });
内容的提问来源于stack exchange,提问作者Nguyễn Ngô Duy
相关产品推荐
相关产品推荐

