2

我有一个包含 iframe 和按钮的 jsp。iframe 包含一个 jqgrid。当按下按钮时,我需要提醒 iframe 内 jqgrid 的记录计数。

我试过了

var grid = jQuery("#myFrame").contents().find("#myGrid");
var count = grid.jqGrid('getGridParam', 'reccount');
alert(count); //alerts undefined

如何从 iframe 访问 jqgrid?

更新:

HTML 片段

    <body>
        <iframe 
            frameborder="0" name="myFrame" id="myFrame" width="100%"
            height="290px" scrolling="no"
            src="myFrameContent.jsp">
        </iframe>
       <form action="frameAction" method="post" target="myFrame">
           <button>refresh table</button> 
       </form>
    </body>

当按下按钮时,表单将被提交,然后 iframe 将重新加载 json 字符串(响应)作为 jqgrid 的数据。根据奥尔加的回答,我试着把

$(function(){
        $("#myFrame").load(function(){         
            var grid = $("#myFrame").contents().find("#myGrid");           
            var count = grid.jqGrid('getGridParam', 'reccount');          
            alert("count=" + count);     
        });
    });

在父 jsp 中,它仍然警告未定义。我错过了什么?

4

2 回答 2

1

可能您在访问iframe内容时遇到了相同的起源问题。看看这里这里

更新:问题可能是您尝试在加载iframe 之前访问它的内容。

关于有效的演示

$(function () {
    $("#myFrame").load(function() {
        var $grid = $(this).contents().find("#list"),
            count = $grid.jqGrid('getGridParam', 'reccount');

        alert("count=" + count);
    });
});

(我使用#list的不是#myGrid你使用的,因为我加载的 iframe 中有另一个网格 ID)我使用jQuery.load来确保我iframeiframe加载后才访问网格。对应的 HTML 如下:

<body>
    <iframe id="myFrame" src="textareaedit.htm"></iframe>
</body>
于 2012-09-10T08:40:14.383 回答
0

如果您使用具有相同域的 iframe,那么它可能很有用,但如果您使用跨域,则无法访问内部 html / 内容。

var $frame = document.getElementById("myFrame");
var $frameContent = frm.contentWindow || frm.contentDocument;

alert($frameContent.document.getElementById("myGrid"));
console.log($frameContent.document.getElementById("myGrid"));
于 2012-09-10T07:39:08.303 回答