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>

ボタンが押されると、フォームが送信され、jqgrid のデータとして json 文字列 (応答) で iframe がリロードされます。オルガの答えに従って、私は入れてみました

$(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ます。ここここを見てください。

UPDATED : おそらく問題は、ロードされるiframe 前にコンテンツにアクセスしようとすることです。

動作するデモについて

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

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

(ロードしたiframeのグリッドの別のIDのために、使用する#list代わりに使用しました) jQuery.loadを使用して、がロードされたにのみグリッドにアクセスするようにします。対応する HTML は次のとおりです。#myGridiframeiframe

<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 に答える