从Iframe获取隐藏字段到容器页面

时间:2010-02-24 21:34:06

标签: javascript asp.net-ajax

我有一个包含iframe的ASP页面。我将其称为主页。 iframe完成加载后,我需要在主页面中设置隐藏字段的值。 iframe是一个ASP页面,它有一个在page_load期间设置的隐藏字段。然后需要将此值传递到主页面上的隐藏字段。

我在iframe页面中有一个onLoad hander,在主框架中调用javascript方法。我不得不在函数中延迟一些telerik控件,因为它无法找到它们。似乎页面尚未完成初始化。

问题: 有一个更好的方法吗? 是否有“页面就绪”事件? 有没有办法让这些页面同步,所以我不需要时间延迟?

Thansks, 布赖恩

在iframe页面中我做了

  window.onload = doLoad;

  function doLoad() {
      window.parent.SetHitCount(document.getElementById("<%=hdnHitCount.ClientID %>").value);
      return;
  }

在主页面中,我有这个javascript函数:

  // called from document iframe to set the hit count
  function SetHitCount(count){
        var hdnHitCount = document.getElementById("<%=hdnHitCount.ClientID %>")
        hdnHitCount.value = count;
        // set in the toolbar. needs a delay so the telerik controls will be ready
        window.setTimeout(function() { 
            var toolbar = $find("<%=RadToolBarDocument.ClientID%>");
            if (toolbar != null) {
                var button = toolbar.findItemByValue("NumberOfHits");
                button.set_text("<%= Resources.Review_Document.Hits %>" + hdnHitCount.value);
            }
       }, 1000); 
  }

1 个答案:

答案 0 :(得分:1)

似乎您的问题与IFrame无关,因为hdnHitCount值正在获得,没有任何问题。

相反,您有一个计时问题 - 当值为。时,控件并不总是可用。

硬编码超时不是一个好的解决方案。如果控制初始化花费的时间超过一秒(例如在较慢的机器/连接上)会怎样?

正确的方法是设置一个系统,其中控件初始化和SetHitCount函数都将检查另一个是否已经发生:

  • 如果运行SetHintCount时控件可用,请运行您的逻辑,否则,将命中计数保存到某个变量
  • 如果在初始化控件时设置了此变量,则从其值中填充控件。否则,SetHitCount尚未执行,并且会在控件填充时生成。