我测试结果,子窗口可以操作父窗口内对象,但无法手动触发父窗口内对象绑定的事件,并且父窗口事件也不会冒泡
demo, 主页面:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="jquery.js"></script>
</head>
<body>
<input type=text id=a value=old />
<input type=text id=b value='click this' />
<script>
$(document).ready(function() {
$('#a').change(function() {
console.log('a changed in main');
fn_change();
});
$('#b').change(function() {
console.log('b clicked in main');
fn_change();
});
function fn_change() {
console.log('a changed in main by fn call');
$('#a').val('new');
}
window.open('page.html');
});
</script>
</body>
</html>
子窗口:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="jquery.js"></script>
</head>
<body >
<input type=button id=btn value='click me' name=btn >
<script>
$('#btn').click(function() {
console.log(window.opener.document);
//$('#a', $(window.opener.document)).change();
$(window.opener.document).find('#a').val('nnn'); // 可以更改'#a'的值,但事件不会冒泡
$(window.opener.document).find('#b').val('ddd'); // 可以更改 '#b'的值,但事件不会冒泡触发#a上绑定的事件
window.opener.fn_change();
});
</script>
</body>
</html>
你的需求可以两种办法来解决:
1、直接在子窗口中修改对象值
2、在父窗口中把事件触发执行的代码写道一个函数内,然后在父窗口事件绑定回调函数中调用此函数;在子窗口中用 window.opener.function_name() 的方式去调用
$("#id',opener.document)
和
opener.$("#id")
是不一样的, 它们的背景不一样。 这个change事件需要显式调用
默认是按照鼠标聚焦来触发的。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。