JavaScript не работает при перезагрузке страницы [Rails]? - PullRequest
0 голосов
/ 14 июня 2011

Это мой JavaScript:

function showQuestion(id) {
  $(".question").hide();
  $("#"+id).show();
}

$(document).ready(function() {
  current_question=1;
  showQuestion(current_question);
  $("#next_question").click(function(){
    alert('The current question is '+current_question);
    current_question=current_question+1;
    showQuestion(current_question);
  });
  $("#prev_question").click(function(){
    alert('The current question is '+current_question);
    current_question=current_question-1;
    showQuestion(current_question);
  });
});

А это мой show.html.erb [мой взгляд на Rails]:

<div id="questions">
  <% @questions.each_with_index do |q,i| %>
    <div id="<%= i + 1 %>" class="question">
    <strong><%= q.body %></strong>
    <% if q.type == "MultipleChoice" %>
      <% q.choices.each do |choice| %>
        <br /><%= radio_button_tag "question#{q.id.to_s}", "choice#{choice.id}", @answer == choice  %>&nbsp;<%= choice.body %>
      <% end %>
    <% end %>
    <table>
    <tr><td><%= link_to "< Previous", '#', :remote => true, :id => "prev_question" %></td><td><%= link_to "Next >", '#', :remote => true, :id => "next_question" %></td></tr>
    </table>
    </div>
  <% end %>
</div>

Итак, когда я нажимаю кнопку «Далее» или «Предыдущий», это работает. Но после этого ни одна кнопка не работает. У меня такое чувство, что это как-то связано с тем, что jQuery не работает. Спасибо!

Ответы [ 2 ]

0 голосов
/ 14 июня 2011

Вы действительно близко!

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

Одним из решений является перемещение таблицы со ссылками «Предыдущая» и «Следующая» за пределы тега, в котором она содержится.Вот скрипка, показывающая скрытую версию вашего кода с ссылками prev и next вне вопроса div.http://jsfiddle.net/QNLF9/

Вы также можете оставить ссылки внутри раздела вопросов, назначить им класс и использовать селектор классов в своем коде jQuery.Вот пример.http://jsfiddle.net/traDx/

Надеюсь, это поможет.Еще одна маленькая вещь.Вы должны использовать html escape-коды &lt; и &gt; вместо < и > соответственно.Удачного кодирования!

0 голосов
/ 14 июня 2011

Если я правильно понимаю код (я не знаю ruby), ваши идентификаторы должны быть уникальными. Вы создаете много кнопок с одинаковым идентификатором. jQuery только присоединяется к первому (так как должен быть только один).

Попробуйте вместо этого изменить класс. Или (возможно, лучше), удалите кнопки из цикла и создайте только один набор кнопок.

РЕДАКТИРОВАТЬ: Кроме того, хотя это, вероятно, не вызывает проблемы, идентификаторы не должны начинаться с цифры, если вы используете HTML5, который, я думаю, может позволить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...