2010-07-14 51 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)。