2012-09-10 34 views
2

我有一個包含iframe和一個按鈕的jsp。 iframe包含一個jqgrid。當按下按鈕時,我需要提醒該iframe中jqgrid的記錄數。在iframe中訪問jqgrid

我試圖

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

如何從一個iframe訪問的jqGrid?

UPDATE:

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中,它仍然警告未定義。我錯過了什麼?

+1

iframe是否顯示與您的網頁來自同一個域的內容? – codebox

+0

var grid = jQuery(「#myGrid」);嘗試這種方式,不需要從iframe中獲得影響... –

+0

是的,它顯示來自同一個域的內容 – Jemp

回答

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")); 
+0

當我做'var s = grid.jqGrid('getGridParam'時給了我一個錯誤, 'reccount');''在哪裏'grid = $ frameContent.document.getElementById(「myGrid」);' 'null'爲空或不是對象 – Jemp

+0

您使用的是跨域iframe嗎? –

+0

父級和iframe內容位於相同的文件夾中。 – Jemp

1

也許你在訪問到iframe內容具有相同的起源問題。看看herehere

修訂:可能的問題是,你嘗試將加載之前訪問iframe的內容。

the demo其中工程

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

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

(我用#list代替#myGrid您使用的,因爲我在其中加載的iframe網格的另一個ID的),我用jQuery.load,以確保我在訪問格iframe只有之後iframe已加載。相應的HTML如下:

<body> 
    <iframe id="myFrame" src="textareaedit.htm"></iframe> 
</body> 
+0

父級和iframe內容來自相同的協議://域:端口,所以相同的源策略不是問題。 – Jemp

+0

@Bnrdo:你能否包含描述問題更多細節的HTML片段。你有靜態的IFRAME或動態創建它嗎?你確定你在加載後嘗試訪問IFRAME *的內容嗎? – Oleg

+0

@Bnrdo:我在我的答案的** UPDATED **部分中發佈了[演示](http://www.ok-soft-gmbh.com/jqGrid/iframe.htm)。 – Oleg