【问题标题】:RJS not updating html table elementsRJS 不更新 html 表格元素
【发布时间】:2009-08-04 14:52:59
【问题描述】:

我有一个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

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

【问题讨论】:

  • 您是否使用 Firebug 查看从服务器返回的 JavaScript 是什么?如果可以,您可以在这里发布吗?
  • 当然:$("calendar_div_0_0").update("可用"); $("calendar_div_0_1").update("可用"); $("calendar_div_0_2").update("可用"); $("calendar_div_0_3").update("可用"); $("calendar_div_0_4").update("可用"); $("calendar_div_0_5").update("可用");这一直重复到 calendar_div_23_6。我没有看到任何错误,帖子没有抛出错误。

标签: javascript html ruby-on-rails ajax


【解决方案1】:

为了做到这一点,ryanb 基本上是正确的。你不能使用&lt;div&gt;&lt;td&gt; 标签顺序来做到这一点。相反,您需要为 &lt;td&gt; 标记使用 id。

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

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

不要使用更新,而是使用替换。

【讨论】:

    【解决方案2】:

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

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

    这对我有用。

    【讨论】:


    • 可用');" %>
      可用');" %>
  • 更新 2 有效,但更新无效。但是,这两个更新都不会改变 标签的颜色
  • 这将替换文本并以绿色突出显示“可用”一词:
    我是一个测试
    td> 但是,“可用”一词周围有一个红色框,其中&lt;td class="checkedout"&gt; 标记并未完全替换为:&lt;%= link_to_function "update 2", $('calendar_div_0_2').update('&lt;td class=\"available\"&gt;Available&lt;/td&gt;');" %&gt;。
  • 此外,“更新”链接将“可用”一词放在表格上方,它不会替换文本。它也没有彩色背景。
  • 您可以通过复制和粘贴源代码来验证:validator.w3.org/#validate_by_input。或者使用类似 FireFox 中的 Web Developer Toolbar 插件:addons.mozilla.org/en-US/firefox/addon/60
  • 猜你喜欢
    相关资源
    最近更新 更多
    热门标签