RJS没有更新html表元素

时间:2009-08-04 14:52:59

标签: javascript html ruby-on-rails ajax

我有一个link_to_remote函数来更新表中的列。但是,它无法正确更新单元格或其属性。

例如:

以下是我要更新的元素:

 <div id= "calendar_div_<%= i%>_<%=j%>" style = "display :inline;"><td class="checkedout">X</td></div>

使用此电话:

  <%= link_to_remote 'Current Week', :url => { :action => :current_week } %>

呼叫:

render :update do |page|

                    page["Week_div"].replace_html session[:next_week].to_s

                    for i in 0..23 do
                            for j in 0..6 do
                                    page["calendar_div_"+i.to_s+"_"+j.to_s].replace_html '<td class="available">Available</td>'
                            end
                    end

但是,它永远不会正确更新<td>标记。元素永远不会正确更新文本,也不会对元素进行颜色编码(td.available被定义为背景颜色为绿色)。

2 个答案:

答案 0 :(得分:1)

为了做到这一点,ryanb大多是正确的。您无法使用<div><td>代码订单执行此操作。相反,您需要使用<td>标记的ID。

但是,这仍然无法正确更新单元格以覆盖颜色;之前的背景仍然出现,新的覆盖了它们重叠的区域。要正确替换整个元素,请使用以下语法:

 $("calendar_div_0_1").replace("<td class=\"available\">Available</td>");

使用替换

,而不是使用更新

答案 1 :(得分:0)

确保您的应用程序中包含Prototype。

<%= javascript_include_tag :defaults %>

此外,如果您没有有效的HTML,有时原型将无法遍历DOM。试试validating the page,专门修复任何没有结束标签的标签。

除此之外,您可以尝试通过实验来隔离问题。试试这个例子。

<div id="calendar_div_0_1"><td class="checkedout">X</td></div>
<%= link_to_function "update", "$('calendar_div_0_1').update('<td class=\"available\">Available</td>');" %>

这适合我。