动态iframe高度取决于隐藏/显示

时间:2013-02-18 13:38:35

标签: javascript jquery iframe dynamic height

我有一个包含一些隐藏字段的表单,这些字段仅根据是/否单选按钮问题的答案显示。

此表单在使用iframe的多个外部网站上使用,因此位于不同的域中。

如何根据是否显示这些隐藏字段来更改iframe的高度。显示/隐藏它们的方式是在单独的scripts.js文件中使用jquery show / hide。 E.g

 $('#show').click(function(){
     $('#additional_fields').show('fast'); 
});

$('#hide').click(function(){
   $('#additional_fields').hide('fast'); 
});


<div id="additional_fields" style="display:none;"> hidden fields here
</div>

包含上述内容的iframe:

<iframe id="idIframe" src="http://websites.com/form.php" scrolling="no" height="1000" width="950" border="0"/>

更新

我设法使用以下

让它工作
$("#idIframe", top.document).css({ height: 1750 });

但是,这仅在使用相同域时有效。

5 个答案:

答案 0 :(得分:0)

向您的iframe提供ID并使用jQuery height函数:

$('#show').click(function(){
      var newHeight = $("#idIframe").height() + 50;
      $("#idIframe").height(newHeight);
      $('#additional_fields').show('fast');   
});

$('#hide').click(function(){
      var newHeight = $("#idIframe").height() - 50;
      $("#idIframe").height(newHeight);
    $('#additional_fields').hide('fast'); 
});

演示如何更改iframe的高度:

http://jsfiddle.net/aZxRn/

答案 1 :(得分:0)

$('#show').click(function () {
    $('#additional_fields').show('fast');
    $("#idIframe").height($("body").height());
});

$('#hide').click(function () {
    $('#additional_fields').hide('fast');
    $("#idIframe").height(0);
});

答案 2 :(得分:0)

您需要使用context选项才能调用框架集。

$('#show').click(function () {
    $('#additional_fields').show('fast');
    $("iframe",window.document).height(150);
});

$('#hide').click(function () {
    $('#additional_fields').hide('fast');
    $("iframe",window.document).height(0);
});

原因是默认情况下Jquerys上下文设置为当前帧的文档,因此您需要手动设置上下文。

答案 3 :(得分:0)

我认为唯一的方法是使用postMessagehttps://developer.mozilla.org/en-US/docs/DOM/window.postMessage)将内容的高度发送到父窗口。

问题是父页面需要收听消息,所以这只有在你对它有一些控制权时才会起作用。

答案 4 :(得分:0)

我写了一个示例,在动画内容的同时调整iframe的大小。我想你应该在我的代码中找到你的解决方案:

http://algorhythm.de/tools/resizeable-iframe/

我的解决方案也只有在您使用父域和iframe的相同域时才有效。这是因为相同的原始政策:http://en.wikipedia.org/wiki/Same_origin_policy