JQuery UI Dialog IE8 проблема - PullRequest
       6

JQuery UI Dialog IE8 проблема

2 голосов
/ 16 ноября 2010

У меня есть диалоговое окно jQuery UI, которое содержит форму, позволяющую пользователю разместить объявление. Поскольку форма содержит загружаемый файл, ее целью является iFrame.

Из этого iFrame я уничтожаю диалоговое окно в родительском окне и создаю новое (или я изменяю параметры исходного диалогового окна, это не имеет никакого значения). Дело в том, что в iFrame я определяю новые кнопки для нового диалога, которые сами прикрепляются к событиям, работающим с элементами основного окна.

В Firefox, Safari, Chrome это работает на отлично:

var p = parent;    

p.$('#dialog_new_ad').html('<form id="post_ad_form" style="display: none" data-remote="true"></form><div class="header"><h1 class="header_title"></h1><div class="header_company"></div><div class="header_location"></div></div><div class="content"></div>');

p.$('#dialog_new_ad').dialog({
 minHeight: 600,
 width: 800,
 position: ['center',25],
 modal: true,
 autoOpen: false,
 title: '<%= 'Preview: ' if params[:action] == 'preview' %><%= @ad.title %>',
 buttons: {
  "« Back": function() {
   p.$('#post_ad_form').attr('method','get');
   p.$('#post_ad_form').attr('action','/ads/<%= @ad.id %>/revise');
   p.$('#post_ad_form').submit();
  },
  "Submit »": function() {
   p.$('#post_ad_form').attr('method','post');
   p.$('#post_ad_form').html('<input type="hidden" name="_method" value="put">');
   p.$('#post_ad_form').attr('action',"/ads/<%= @ad.id %>/confirm");
   p.$('#post_ad_form').submit();
  }
 }
});

Этот код находится в iFrame, к которому отправляется форма.

Если вы посмотрите на функции кнопок, вы увидите, что их действия также определяются в контексте дочернего окна (iFrame), даже если кнопки находятся в родительском окне. Это потому, что функция создается в iFrame, и, следовательно, на объекты необходимо ссылаться из этого контекста.

Теперь проблема в том, что в Internet Explorer это работает иногда, но не в других. Когда этого не происходит, я получаю сообщение об ошибке «Не могу выполнить код в освобожденном скрипте», и оно указывает на ту часть jquery-ui.js, где определены функции кнопок. Происходит ли ошибка просто случайно. Как будто это зависит от того, завершилось ли что-то до вызова этого кода. Как уже упоминалось, в любом другом браузере это всегда работает.

Вся вещь (в iFrame) заключена в $(function() { [...] }, поэтому загружается DOM, это не проблема. Это может иметь какое-то отношение к тому факту, что форма, созданная с помощью вызова .html, не «завершается вводом в DOM», когда определены функции кнопок, но это может показаться мне странным. Есть идеи?

Примечание: Функция jQuery .html использует innerHTML для создания новых элементов. Возможно ли, что это приведет к каким-либо проблемам в IE, если на элементы будут ссылаться непосредственно после этого?

Обновление: Я отказался и просто поместил фиктивную форму в родительский элемент, чтобы она всегда могла использоваться дочерними элементами iFrames, независимо от того, загружены они или нет. Когда форма является статической частью родительского HTML и не вставляется динамически, все работает просто отлично. Я до сих пор не понимаю, почему динамическая вставка не работает в IE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...