代码之家  ›  专栏  ›  技术社区  ›  Tyler K

RJS不更新HTML表元素

  •  0
  • Tyler K  · 技术社区  · 16 年前

    我有一个 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 回复  |  直到 16 年前
        1
  •  1
  •   Tyler K    16 年前

    为了做到这一点,Ryanb基本上是正确的。你不能用 <div><td> 标签顺序。相反,您需要使用 <td> 标签。

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

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

    不要使用更新,使用 代替 .

        2
  •  0
  •   ryanb    16 年前

    确保应用程序中包含原型。

    <%= 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>');" %>
    

    这对我很有用。