2010-07-14 50 views
0

我需要创建一个'回复'按钮,显示供稿中任何项目的表单。换句话说,它不能显示/隐藏具有唯一div ID的内容,因为它必须适用于任何(可能)无限数量的项目。如何在Rails应用程序中显示/隐藏多个div(每个div都不可能有唯一的ID)?

如果我用这样的代码:

<% @questions.each do |question| %> 
    <%= question.content %> 
    <a href="" onclick="showStuff('reply'); return false;">Reply</a> 
    <div id="reply"> 
    <% form_for @reply do |f| %> 
     <%= f.text_field :message %> 
     <%= f.submit "Add", :class => "button" %> 
    <% end %> 
    </div> 
    <% end %> 

然后形式只打开了饲料中的第一项。

我完全不知道的Javascript并没有太大的JQuery

+2

如果ID不能唯一,您需要将其从循环中移除,因为如果ID不止一个,就会生成无效的HTML。 – 2010-07-14 15:58:30

+1

我相信你应该使用'class'而不是'id',因为'id's应该是唯一的。 – 2010-07-14 17:14:36

回答

0

当您正在生成多个元素,你不应该给他们一个ID,因为每个ID应该是唯一的。

而是通过搜索相对于单击的链接来找到div。

<% @questions.each do |question| %> 
    <%= question.content %> 
    <a href="" onclick="showStuff(this); return false;">Reply</a> 
    <div> 
     <% form_for @reply do |f| %> 
      <%= f.text_field :message %> 
      <%= f.submit "Add", :class => "button" %> 
     <% end %> 
    </div> 
<% end %> 
. 
. 
. 
function showStuff(link){ 
    $link).next().show(); 
} 
+0

hm,所以我可以替换: function showStuff(id){ document.getElementById(id).style.display ='block'; } 与 function showStuff(link){ $ link).next()。show(); } ..... (即$表示JQuery,对吗?如果我不使用JQuery,我会把它拿出来吗?) – kateray 2010-07-14 16:39:12

+0

是的,$表示jQuery。尽管您不必使用jQuery,但如果您使用的是任何类型的javascript,那么jQuery,原型或其他任何一个库都会帮助您。 sosborn建议动态生成唯一的id值,虽然这是可能的,但在这种情况下它不是必需的 - $(link)获取引用点击链接的jQuery对象,.next()获取下一个元素DOM(在本例中为div)和.show()实际上是style.display ='block'的快捷方式。给jQuery一个尝试 - 你不会后悔的。 – belugabob 2010-07-15 07:20:00

1

我不明白为什么它不可能给出唯一的ID。只要在你的循环中做这样的事情:

<div id="reply_<%= question.id %>"> 

现在你所有的div都有唯一的ID。此外,很容易知道什么div ID引用了哪个问题,因为您知道从数据库中提取哪些问题(以及相应的ID)。