Мне нужно создать кнопку «Ответить», которая показывает форму для любого элемента в ленте. Другими словами, он не может показывать / скрывать что-то с уникальным идентификатором div, потому что он должен работать для любого (потенциально) бесконечного количества элементов.

Если я использую такой код:

<% @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

0
kateray 14 Июл 2010 в 19:49

2 ответа

Лучший ответ

Поскольку вы создаете несколько элементов, вы не должны указывать им идентификатор, потому что каждый идентификатор должен быть уникальным.

Вместо этого найдите 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
belugabob 14 Июл 2010 в 16:06

Я не понимаю, почему нельзя давать уникальные идентификаторы. Просто сделайте что-то вроде этого в своем цикле:

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

Теперь все ваши div будут иметь уникальные идентификаторы. Кроме того, легко узнать, какой идентификатор div ссылается на какой вопрос, потому что вы знаете, какие вопросы (и соответствующие идентификаторы) вы извлекли из базы данных.

1
sosborn 14 Июл 2010 в 23:13