Использование haml или erb-кода в ModalBox приводит к тому, что обратный вызов afterLoad не вызывается - PullRequest
0 голосов
/ 29 июня 2010

Я открываю ModalBox с:

=link_to_function "Add", "Modalbox.show('appt', {title: this.title, width: 600, height: 400, afterLoad: function() { alert('Content loaded') } });"

Это загружает файл haml. Когда файл haml содержит определенный код, обратный вызов никогда не запускается. То же самое происходит и с файлами .erb.

Например, обратный вызов запускается, когда файл содержит:

<% form_for(:appointment) do |f| %>
  <%= f.error_messages %>
<% end %>

но не в том случае, если оно содержит:

<% form_for(:appointment) do |f| %>
  <%= f.error_messages %>
  <%= f.submit 'Update' %>
<% end %>

Есть какие-нибудь подсказки?

EDIT:

Я сузил его, и он нарушает этот код в modal.js:

var firstEl = this.focusableElements.find(function findFirst(el){
  i++;
  return el.tabIndex == 1;
}) || this.focusableElements.first();

На самом деле не задумывался, почему, но поскольку он просто пытается установить фокус на первом найденном элементе, я просто закомментирую строку 'this._setFocus ();' в '_putContent'.

Мне все еще любопытно, почему это происходит в случае, упомянутом выше, если кто-то знает.

Ответы [ 2 ]

1 голос
/ 02 июня 2011

У меня была такая же проблема, и ваш пост был очень полезным!Я также узнаю, что строка 361 вызывает ошибку.Я изменил его следующим образом: "if (firstEl) firstEl.focus();"

Теперь IE8 выдает сообщение об ошибке с небольшим объяснением: "Ошибка: невозможно переместить фокус на элемент управления, поскольку он невидим, не включен илитип, который не принимает фокус. "

Возможно, IE не может установить фокус на элемент, если он отсутствует на дисплее.И я предполагаю, что в данный момент фокус устанавливается, элемент действительно все еще скрыт.Похоже, что FF справляется с этим лучше.

Так что для моего обходного пути я прокомментировал строку 361, и теперь она работает.

0 голосов
/ 29 июня 2010

Разве вы не можете просто установить атрибут tabIndex равным "1" для первого поля в модале?

<% form_for(:appointment) do |f| %>
  <%= f.error_messages %>
  <%= f.submit 'Update', :tabindex => 1 %>
<% end %>
...