JavaScript无法在页面重新加载[Rails]上运行?

时间:2011-06-14 02:12:55

标签: jquery ruby-on-rails ruby-on-rails-3 model-view-controller views

这是我的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 :(得分:0)

如果我正确理解代码(我不知道ruby),您的ID应该是唯一的。您正在创建许多具有相同ID的按钮。 jQuery只附加到第一个(因为应该只有一个)。

尝试将其更改为类。或者(可能更好),从循环中删除按钮,只创建一组按钮。

编辑:此外,虽然这可能不会导致问题,但ID不应该以数字开头,除非您使用HTML5,我认为可能允许这样做。

答案 1 :(得分:0)

你真的很亲密!

问题是您为每个具有相同ID的问题生成一组链接,这是不正确的。听起来第一次点击其中一个时,第一组链接就被隐藏了。

一种解决方案是使用包含它的标记之外的Previous和Next链接移动表。这是一个小提示,显示代码的简化版本以及问题div之外的prev和next链接。 http://jsfiddle.net/QNLF9/

您也可以将链接留在问题div中,为它们分配一个类,并在jQuery代码中使用类选择器。这是一个例子。 http://jsfiddle.net/traDx/

我希望有所帮助。另一件小事。您应该分别使用html转义码&lt;&gt;而不是<>。快乐的编码!