【问题标题】:Iframe DOM Problem: undefined values when accessing form fieldiframe DOM 问题:访问表单字段时未定义的值
【发布时间】:2011-06-07 08:01:56
【问题描述】:

我在调试一些通常看起来很容易修复的 JavaScript 时遇到了麻烦。我尝试了几种方法,一些基于使用表单访问字段,其他方法通过使用 getElementById。我还搞砸了在几个地方输入/输出名称属性。

在 iframe 文件中,asdf_iframe.html:

    <form id="asdf_form" name="asdf_form" action="asdf_iframe.html">
      <input type="hidden" id="field_1">
    </form>

在基础文件中:

    <iframe id="asdf_iframe" name="asdf_iframe" src="asdf_iframe.html" height="50" width="50">
    </iframe>

    <script>
      function get_iframe_doc(_window,frame_id) {
        var frame_elem = _window.document.getElementById(frame_id);
        if(frame_elem.contentDocument)
          return frame_elem.contentDocument;
        else
          return frame_elem.contentWindow.document;
      }
    </script>

    <script>
      var asdf_iframe_doc = get_iframe_doc(this,"asdf_iframe"); //Profiler says this is defined
      asdf_iframe_doc.getElementById("field_1").value = 1234;   // Error Here: not defined
    </script>

我尝试了许多不同的方法来访问 field_1,但都没有成功。

【问题讨论】:

  • 嘿Skolem,这两个答案都解决了你的问题,接受一个!
  • 糟糕,感谢您的提醒。

标签: javascript html dom iframe


【解决方案1】:

对我来说,你似乎在打电话

asdf_iframe_doc.getElementById("field_1").value = 1234;

太早了。您需要在 iframe 加载完其 url 后调用该方法。

这是一个尝试。

window.onload = function() {
    var iframe = window.frames["asdf_iframe"];
    iframe.onload = function() {
        iframe.document.getElementById('field_1').value = 1234;
    }
}

【讨论】:

    【解决方案2】:

    您的脚本运行得太快了。试试这个吧。

    <script>
    window.onload = function() {
      var asdf_iframe_doc = get_iframe_doc(this,"asdf_iframe");
      asdf_iframe_doc.getElementById("field_1").value = 1234;
    }
    </script>
    

    【讨论】:

    • 它需要是iframe的onload,而不是外部页面的onload!
    • 因为 iframe 的 DOM 没有和窗口的 DOM 同时准备好。从概念上讲,您不应该在相应窗口触发 DOMReady 事件之前访问文档的 DOM
    • @Juan - 您的解决方案是否存在风险,即 iframe 上的加载事件将在主窗口上的加载事件之前发生,因此 iframe.onload = 位会发生得太晚?
    • iframe 的负载处理程序可能已经运行似乎是合理的。在我运行的测试中没有发生,如果您的脚本不在头脑中,它似乎可能会发生,但我无法重现它。您可以通过测试 document.onreadystate == 'complete' 来解决它
    • 根据developer.mozilla.org/en/DOM/window.onload,“加载事件在文档加载过程结束时触发。此时,文档中的所有对象都在DOM中,并且所有图像和子-帧已完成加载。”所以 iframe 保证被加载,这应该可以正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    • 2012-07-10
    • 2012-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多