Ошибка RJS: [ошибка объекта] в IE 8 при ответе RJS от rails/scriptaculous

У меня есть контроллер с:

render :update do |page|
  page.replace_html 'some_id', :partial => 'some_partial'
end

Он отлично работает в Firefox, но IE выдает «Ошибка RJS: [Ошибка объекта]»

Глядя на сгенерированный javascript, он выглядит так:

Element.update("some_id", "\u003Cselect id=\"some_other_id\" name=\"some_name[]\"\u003E\u003Coption value=\"-1\"\u003E\u0026lt; Default option \u0026gt;\u003C/option\u003E\n\u003Coption value=\"1\" selected=\"selected\"\u003E Some option \u003C/option\u003E\u003C/select\u003E\n");

Но даже попытка с Element.update("some_id", "hello world") не удалась в IE.
Однако замена пустой строкой работает.

Глядя на функцию Element.update:

update: function(element, content) {
  element = $(element);
  if (content && content.toElement) content = content.toElement();
  if (Object.isElement(content)) return element.update().insert(content);
  content = Object.toHTML(content);
  element.innerHTML = content.stripScripts();
  content.evalScripts.bind(content).defer();
  return element;
}

Кажется, что element.innerHTML = content.stripScripts(); вызывает некоторые проблемы, выдавая «Неизвестную ошибку времени выполнения» независимо от того, что я ей подаю, кроме пустой строки.

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

У меня рельсы 2.3.11, scriptaculous 1.8.1 и прототип 1.6.0.3

Я совсем потерялся - любые подсказки приветствуются.


person Jeppe Liisberg    schedule 14.07.2011    source источник


Ответы (2)


Попробуйте page.replace вместо page.replace_html. Похоже, вы можете обновить параметры списка выбора другим списком выбора. Другой способ — просто заменить параметры с помощью options_for_select для отображения тегов параметров.

person inkdeep    schedule 14.07.2011
comment
Я уже пытался работать с page.replace, но это заменит весь тег some_id, а не только его innerHTML. Но ваша идея с options_for_select работает как шарм! :-) page.replace_html 'inner_id', options_for_select(collection, selected) Понятия не имею, почему, должно быть, это синдром магического сбоя IE... Спасибо! - person Jeppe Liisberg; 15.07.2011
comment
Просто для уточнения. Использование replace_html обновило список выбора, чтобы он выглядел следующим образом: <select><select>[…options…]</select></select> Замена параметров текущего выбора тегом выбора и его параметрами. Я предполагаю, что IE не любит эту разметку, но другие браузеры более снисходительны. Рад видеть, что у тебя получилось. - person inkdeep; 16.07.2011

Что за элемент "some_id"? Я пытался обновить содержимое элемента "p", и это просто не сработало. Я переключил «p» на «div», и все заработало. Все остальные браузеры, IE9, ff, chrome и т. д. работали, но не IE8 и ниже.

person Buffy Miller    schedule 15.09.2011