RJS错误:IE 8中的[对象错误]来自rails / scriptaculous的RJS响应

时间:2011-07-14 09:15:03

标签: ruby-on-rails internet-explorer scriptaculous rjs

我有一个控制器:

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

我很失落 - 欢迎任何提示。

2 个答案:

答案 0 :(得分:1)

尝试使用page.replace代替page.replace_html。看起来您可能正在使用其他选择列表更新选择列表选项。另一种方法是使用options_for_select替换选项以呈现选项标记。

答案 1 :(得分:0)

什么样的元素是“some_id”?我试图更新“p”元素的内容,它只是不起作用。我将“p”切换为“div”并且工作正常。所有其他浏览器,IE9,ff,chrome等等都有效,但不是IE8及以下版本。