checkbox(need_delivery)用于指示是否显示接下来的2个文本框。这两个文本框包装在div中,其ID为task_request_delivery。这是simple_form视图task_request中的代码:

  <%= f.input :need_delivery, :label => 'Need Delivery:', :as => :boolean %>

  <div id="task_request_delivery">
  <%= f.input :what_to_deliver, :label => 'Content:', :input_html => {:rows => 4} %>
  <%= f.input :delivery_instruction, :label => 'Instruction:', :input_html => {:rows => 4} %>
  </div>


JavaScript下相应的js代码为:

$(function(){
   $("#task_request_need_delivery").change(function() {
     var rpt = $('#task_request_need_delivery').val();
     alert(rpt);
     if ( rpt == 1 || rpt == 'true' || rpt == '1') {
        $("#task_request_delivery").show();
     } else {
        $("#task_request_delivery").hide();
     }
   });
});


插入alert(rpt)以显示rpt的值。这是我们发现的:


选中或取消选中此复选框时,rpt的值始终为1。
if ( rpt == 1 || rpt == 'true' || rpt == '1')始终返回false


最初选中该框后,这两个文本框将被隐藏。此后,取消选中或选中复选框并没有改变视图上的任何内容(2个文本框仍处于隐藏状态)。同样,rpt始终为1,并且if ( rpt == 1 || rpt == 'true' || rpt == '1')始终被评估为false,这是矛盾的(rpt为1,然后if应该为true)。上面的代码有什么问题?谢谢您的帮助。

最佳答案

我认为您应该使用.is(':checked')方法来确保您的复选框处于选中状态。

10-02 15:44