2011-07-14 34 views
1

我有一个控制器:RJS错误:从轨道RJS响应[对象错误]在IE 8/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

我完全迷失了方向 - 任何提示是值得欢迎的。

回答

1

尝试page.replace而不是page.replace_html。它看起来像你可能正在更新选择列表选项与另一个选择列表。另一种方法是使用options_for_select替换选项来渲染选项标签。

+0

我已经尝试过使用'page.replace',但是它会替换整个'some_id'标记而不仅仅是它的innerHTML。 但是'options_for_select'的想法就像魅力! :-) 'page.replace_html 'inner_id',options_for_select(收集,选择)' 不知道为什么,必须是 “IE魔术失败综合症” ... 谢谢! –

+0

只是为了澄清 - 使用'replace_html'更新选择列表看起来像这样:' [...选项...]'替换当前选择的选项与选择标记及其选项。我想IE不喜欢这种标记,但其他浏览器更宽容。很高兴看到你有它的工作。 – inkdeep

0

“some_id”是什么样的元素?我试图更新“p”元素的内容,但它不起作用。我把“p”换成了“div”,它工作正常。所有其他浏览器,IE9,FF,铬等,等工作,但不是IE8及以下。