jquery 在父页面中如何获取子页面中的对象

例:现有 两个jsp页面,一个是a.jsp,另一个是b.jsp
a.jsp 的body中 的代码如下:
<iframe id="id_iframe" src="b.jsp" frameborder="0" scrolling="no" ></iframe>

b.jsp 的body中 的代码如下:
<input type = "button" value = "测试" id = "id_button_test" />

在a.jsp页面中写如下的js代码为什么打印不出来 "test" ?
var doc = document.getElementById('id_iframe').contentWindow.document;
$(doc).find("#id_button_test").click(function() {
alert("test");

});

用 alert($(doc).find("#id_button_test").length); 打印出来的是 1 ,可见获得了那个对象,但为什么click事件没有触发?

两点

1.既然你用jQuery了,为什么还要用getElementById()来获取元素?况且,获取iframe中元素也没这么麻烦啊

$("#id_iframe").contents().find("#id_button_test");

这不就好了。。

2.你这部分代码是写在a.jsp页面中了吧?那我估计之所以不运行,是因为你注册点击事件的时候,b.jsp页面还没有加载完。所以尽管你调试的时候能输出,但是代码里是注册不上的。把这段代码写在b.jsp的window.onload事件中

追问

有可能是这个原因,代码移到b.jsp页面中是可以的,那我想在a.jsp页面window.onload中给那个按钮注册 click事件就没法实现了么?

追答

可以实现呀,绑定iframe的onload事件,在里边处理就行了。不过因为IE跟其他浏览器的处理方式不大一样,所以稍微有些麻烦。

var iframe = $("#id_iframe")[0];
if (iframe.attachEvent){  // for IE
    iframe.attachEvent("onload", function(){
        // do your task
    });
} else {
    iframe.onload = function(){
        // do your task
    };
}

这是NCZ推荐的写法,我个人也比较推崇,这样就能办到了。

不过话说回来,你要在a.jsp中进行绑定,我基本可以肯定你的结构设计肯定是有问题的。

这样倒是能实现,不过我建议你最好还是仔细想想,重新设计结构

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-10-11
$(doc).find("#id_button_test").click(function(){
alert("test");

});
这么做,只是在按钮上注册了click事件函数,并没有触发。当你点击按钮的时候,就能看到alert弹出框了。
要触发click事件,可以使用trigger方法。
$(function(){
//注册click事件函数。
$(doc).find("#id_button_test").click(function(){
alert("test");

});
//立即触发click事件
$(doc).find("#id_button_test").trigger("click");
});追问

就是点击按钮出不来,不知道为什么。

追答        $(function(){
            //iframe加载完成后执行
            $("#id_iframe").load(function(){
                var $frm = $(this);
                var $contents = $frm.contents();
                $contents.find("#id_button_test").click(function(){
                   alert("TEST");
                });
            });
        });

以上代码,在IE10、Firefox 24.0 版本下测试通过。

本回答被网友采纳
第2个回答  2013-10-11
$(function(){
var doc = document.getElementById('id_iframe').contentWindow.document;
$(doc).find("#id_button_test").click(function() {
alert("test");
});
});

jquery 在父页面中如何获取子页面中的对象
两点 1.既然你用jQuery了,为什么还要用getElementById()来获取元素?况且,获取iframe中元素也没这么麻烦啊 ("#id_iframe").contents().find("#id_button_test");这不就好了。。2.你这部分代码是写在a.jsp页面中了吧?那我估计之所以不运行,是因为你注册点击事件的时候,b.jsp页面还没有加载完...

jquery 在父页面中如何获取子页面中的对象
两点 1.既然你用jQuery了,为什么还要用getElementById()来获取元素?况且,获取iframe中元素也没这么麻烦啊 ("#id_iframe").contents().find("#id_button_test");这不就好了。。2.你这部分代码是写在a.jsp页面中了吧?那我估计之所以不运行,是因为你注册点击事件的时候,b.jsp页面还没有加载完...

JQuery怎么获取子窗口的元素
(function(){\/\/相当天body的 onload,要等页页面加载完毕后才能找到iframe $("#hong").contents().find("body").append("I'm in an iframe!");});

jquery,iframe,如何在父窗口监听,子窗口发生改变时,父窗口获取子窗口的...
①jquery在父页面 获取iframe子页面的元素 代码如下:(objid为子页面的id)("#objid",document.frames('iframename').document)②js 在父页面获取iframe子页面元素代码如下:window.frames["iframe_ID"].document.getElementByIdx_x("元素id");以上两种都能获取到子页面中的元素,再根据元素去获取元素...

父页面使用jquery查找子网页中的元素如何写代码?
\/\/子查父 ('#name', window.top.document).append("hello");\/\/父查子 (function(){要等页页面加载完毕后才能找到iframe ("#iframeID").contents().find("#name").append("hello");});

jquery如何从多个iframe中查找元素?
经测试:一。找子窗口中的元素,用contents().find()的方法可以实现。比如:var w=$("#bb").contents().find("#c").contents().find("#ni").html();找到当前页面中id为bb的iframe下的id为c的iframe下的id为ni的html()二。找父窗口中的元素,用:var a=$(window.parent.document).find...

jQuery如果在所有同class的DIV下的点击其中一个DIV,如何获得这个DIV下...
\/\/页面加载 (document).ready(function(){ \/\/给所有的父类DIV添加事件 ('.class_one').live('click', function() { (this).children().eq(1).css("display","none");});});你在你的JS中加入这样一段话 它的意思是:点击父类时,找到父类下的第二个子集,给这个子集添加css样式 希望...

js对iframe内外(父子)页面进行操作
父页面获取iframe子页面元素的代码 使用jQuery在iframe子页面和父页面操作元素的代码 在iframe中调用父页面方法和变量 父页面对iframe子页面方法和变量的控制在进行操作前,务必确保iframe已经完成加载,避免因提前调用而导致错误。可以通过onload事件或检查document.readyState来判断。

我用了jquery的 load 方法 实现了父页面局部打开子页,子页里有a标签...
你好,jquery的load方法是从服务器加载页面至对应的DIV容器当中,由于DIV为“父页面”的一个元素,所以这里没有“子页面”,“父页面”的关系,他们同在一个页面当中,点击其中的连接当然会刷新页面,如果你需要在该DIV中刷新内容,就需要写相应的AJAX代码。

如何让子窗口的div显示在父窗口之上
<1> js或者jQuery访问页面中的框架iframe.注意:框架内的页面是不能跨域的! 假设有两个页面,在相同域下.假设:父窗口 index.html ,有id 为 subifrm 的iframe 1. 在index.html执行JS直接访问子窗口中某元素:document.getElementById('subifrm').contentWindow.document.getElementById('test').style...

相似回答