【问题标题】:jQuery not working on iframe contentjQuery 不适用于 iframe 内容
【发布时间】:2013-08-25 01:31:03
【问题描述】:

当输入字段使用 jQuery 聚焦时,我尝试将 css 应用于标签,但它似乎不起作用。联系表单加载在 iframe 中。如果不使用 iframe,它可以正常工作 - 检查此 jsfiddle:http://jsfiddle.net/nN3w2/(如果 iframe 未加载,服务器可能已关闭 - 但代码在那里供您查看)。

iframe 和联系表单位于同一个域中。使用 php 将联系表包含在我的网站中。

<script type="text/javascript">
jQuery(document).ready(function($) {
    $("#iframe").contents().find("input").focus(function() {
        $("#iframe").contents().find("label").css('opacity','0');
    });
});
</script>

非 iframe

<script type="text/javascript">
jQuery(document).ready(function($) {
    $("input").focus(function() {
       $("label").css('opacity','0');
    });

    $("input").focusout(function() {
         if($("input").val() ==="" ) {
           $("label").css('opacity','1');
        }
    });

});
</script>

【问题讨论】:

  • 当两个文档位于同一域时对我有用:jsfiddle.net/doktormolle/Q7QuW/1
  • 这能回答你的问题吗? stackoverflow.com/a/5976237/779092 注意:您将希望在 iframe 的 onload 事件中运行我们的代码,而不是当前文档的事件。
  • 我在 jsfiddle 中使用我的网站网址对其进行了测试,这就是它无法正常工作的原因。但现在它适用于我的域,谢谢。

标签: jquery css iframe input


【解决方案1】:

不可能

您不能将 jQuery 应用于其他域 iframe。由于安全原因,它已被阻止。

扩展“不可能”...

Same origin policies”适用:您与来自另一个 [域|子域|协议|端口] 的 iframe 内容通信的唯一方法是通过 postMessage API,这当然需要另一部分( iframe 内的文档)以收听您的消息。

OP 评论后更新

也许你可以这样做

$('#iframeOne', window.parent.document);

另一种方法

window.parent.$("#iframeOne");

另一种方式

$("#iframeOne", top.document);

如果你知道父窗口的名字,你也可以这样做

$("#iframeOne",opener.document)

这里opener是窗口的名字。

【讨论】:

  • 虽然 iframe 位于我的域中,联系表单 php 文件也是如此,我仍然无法访问它?
  • 我在 jsfiddle 中使用我的网站网址对其进行了测试,这就是它无法正常工作的原因。但现在它适用于我的域,谢谢。
  • 这就是我的想法,这就是为什么我在顶部提到you can't apply jQuery to other domain iframes. It's blocked due to security.
猜你喜欢
  • 2018-03-08
  • 1970-01-01
  • 2018-07-08
  • 2014-10-10
  • 1970-01-01
  • 2014-09-21
  • 1970-01-01
  • 2021-06-02
  • 2019-04-23
相关资源
最近更新 更多