jQuery不能在javascript ruby标签中工作



我以前提出过这个问题,但我试图这样做的方式至少可以说是糟糕的。当某个参数在Ruby循环中完成时,我需要调用jQuery show()方法。我的想法是一个类似于示例的Javascript标记。但是由于某种原因,jQuery不能在这个javascript标签中工作。我想不出比我现在正在做的更好的方法了。

代码:

<% @records.each do |record| %>
            <% if record.task.project.name == "SKIP"%>
            <%= javascript_tag :defer => 'defer' do -%>
                $('.toil.).show();
            <% end -%>
            <% else %>
<%= javascript_tag :defer => 'defer' do -%>
                    $('.toil.).hide();
                <% end -%>

this循环有效,我已经测试过了。有没有更好的方法来实现我想要的?如果有一个项目的名称跳过然后一个类需要显示…如果没有,那就得藏起来。

你并没有真正解释需要隐藏或显示的内容的本质,所以有很多方法可以做到这一点。

如果它是HTML的每条记录的一部分,只是不要在循环中呈现它:

<% @records.each do |record| %>
  <% if record.task.project.name != "SKIP"%>
    All the HTML
  <% end %>
<% end %>

如果它是你仍然需要渲染的东西,因为它可能会在以后变得可见,设置一个类:

<% @records.each do |record| %>
  <% skipIt = record.task.project.name == "SKIP" ? "display: none;" : "" %>
    <span style="<%= skipIt %>">
      All the HTML
    </span>
  <% end %>
<% end %>

如果只是一个稍后使用的标志:

<% skipIt = false %>
<% @records.each do |record| %>
  <% skipIt = true if record.task.project.name == "SKIP" %>
    All the HTML
  <% end %>
<% end %>
...
$(function() {
  <% if skipIt %>
    $(".toil").hide();
  <% end %>
});

等。有很多方法。这取决于你真正需要什么,而我们不知道。

(在上面的大多数示例中,功能可能应该移动到部分或至少是帮助器中。)

首先,这里有一个错别字:

 $('.toil.).show();

选择器的末尾缺少一个单引号。

它们应该是,例如:

 $('.toil').show();

将显示所有css类名为"辛劳"的元素。Javascript和jQuery与HTML和CSS一起工作,我有一种感觉,你正在尝试阅读或操纵ruby标签,这将不起作用,因为JS是在数据到达浏览器时执行的,所以ruby标签已经被处理并转换为HTML,以防万一:D

最新更新