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

例:现有两个jsp页面,一个是a.jsp,另一个是b.jspa.jsp的body中的代码如下:<iframeid="id_iframe"src="b.jsp"frameb... 例:现有 两个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事件没有触发?
展开
 我来答
绛紫方糖
2013-10-11 · TA获得超过742个赞
知道小有建树答主
回答量:197
采纳率:0%
帮助的人:229万
展开全部

两点

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中进行绑定,我基本可以肯定你的结构设计肯定是有问题的。

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

百度网友0231eae
2013-10-11 · TA获得超过206个赞
知道小有建树答主
回答量:121
采纳率:0%
帮助的人:126万
展开全部
$(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 版本下测试通过。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xyp594703185
2013-10-11
知道答主
回答量:13
采纳率:0%
帮助的人:6.7万
展开全部
$(function(){
var doc = document.getElementById('id_iframe').contentWindow.document;
$(doc).find("#id_button_test").click(function() {
alert("test");
});
});
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式