2009-08-19 87 views
2

我有以下的html:jQuery的 - 一个iframe里面的脚本代码无法更新iframe的内容

<html> 
    <head></head> 
    <body> 
     <form> 
      <input id="msg" type="text" value="oldValue" /> 
     </form> 
     <script src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"></script> 
     <script> 
      $().ready(function() { 
       var m = $("#msg"); 
       alert(m.val()); // returns oldValue 
       m.val("newValue"); // this doesn't make the browser show newValue instead of oldValue 
       alert(m.val()); // returns newValue 
       // and in the end, the browser still shows oldValue for the input 
      }); 
     </script> 
    </body> 
</html> 

此代码运行完美,但是当置于facebox(这只是创建一个iframe并显示它像一个浮动窗口),代码无法更新输入的内容。

父母也有jQuery,但不应该影响我猜测的任何东西。

任何想法为什么它失败?

+0

你是否试过让实际的DOMElement而不是使用jQuery的方法来做到这一点? – geowa4 2009-08-19 17:31:21

回答

1

无法在Firefox 3,IE 7或Chrome 2上复制。无论代码是否在iframe中,该代码都可以正常工作(使用newValue)。

您是否测试了缩减样本的实现,而不是原始样本?因为我怀疑我们有一个问题,你认为它们是相同的,而不是。

当然,好消息是,如果您发布的示例实现有效,那么您所要做的就是添加实际实现中的元素,直到出现问题。

+0

实际上,在我的实现中,它是从同一个域加载的,粘贴的版本只是为了能够共享它,因为我的实现要大得多:) – Prody 2009-08-19 17:01:10

-1
doc = xframe.contentWindow.document || xframe.document || xframe.contentDocument || xframe.contentWindow && xframe.contentWindow.document || null; 

if(!doc) 
{ 
    alert("Error"); 
    return false; 
} 

var m = $(doc).find("#msg"); 
+0

如果你仔细阅读我的描述,你会发现我的脚本成功找到#msg元素,可以读取它的值,但无法设置它。 – Prody 2009-08-19 17:02:08

+0

好的,我正在进行的是访问数据的替代方案。那么这在你的能力适应。有一件事是没用的,其他的东西是错误的。 – 2009-08-19 17:40:38

+0

如果项目位于iframe中,则只能使用iframe对象进行访问。我们必须看看在当前文档的iframe中是否有相同的id,¿ – 2009-08-19 17:44:00