Iframe DOM Проблема: неопределенные значения при доступе к полю формы - PullRequest
0 голосов
/ 07 июня 2011

У меня были проблемы с отладкой некоторого 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, но безуспешно.

Ответы [ 2 ]

3 голосов
/ 07 июня 2011

Мне кажется, вы звоните

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;
    }
}
1 голос
/ 07 июня 2011

Ваш скрипт просто запускается слишком рано. Попробуйте вместо этого.

<script>
window.onload = function() {
  var asdf_iframe_doc = get_iframe_doc(this,"asdf_iframe");
  asdf_iframe_doc.getElementById("field_1").value = 1234;
}
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...