Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Rails、Ajax和boolean;不能取消复选框_Javascript_Ruby On Rails_Ajax - Fatal编程技术网

Javascript Rails、Ajax和boolean;不能取消复选框

Javascript Rails、Ajax和boolean;不能取消复选框,javascript,ruby-on-rails,ajax,Javascript,Ruby On Rails,Ajax,我知道还有一大堆相关的问题,但我的问题无法解决。这是我所拥有的 #app/views/tasks/index.html.erb <%- @tasks.each do |task| %> <div class="task-wrapper"> <%= check_box_tag 'checked_in', task.id , task.checked_in, :class => "task-check" %> <%= content

我知道还有一大堆相关的问题,但我的问题无法解决。这是我所拥有的

#app/views/tasks/index.html.erb
<%- @tasks.each do |task| %>
  <div class="task-wrapper">
    <%= check_box_tag 'checked_in', task.id , task.checked_in, :class => "task-check" %>
    <%= content_tag :span, task.name %>
  </div>
<% end %>
<%= link_to 'New Task', new_task_path %>

  <script>
$(".task-check").bind('change', function(){
  if (this.checked){
    $.ajax({
      url: '/tasks/'+this.value+'/toggle',
      type: 'POST',
      data: {"checked_in": this.checked}
    });
  }
  else {
     alert("no");
  }
});
  </script>

#app/controllers/tasks_controller.rb
...
def toggle
  @task = Task.find(params[:id])

  if @task.update_attributes(:checked_in => params[:checked_in])
    # do I need something here?
  else
    # do I need something here?
  end
end
...
我的任务模型有一个布尔值的“checked_in”属性

我从这个问题中得到了这个代码

…而且不太了解正在发生的一切。当我创建一个新任务时,我可以成功选中该框,将布尔值设置为true。然而,当我取消选中该框时,我会得到一个js弹出窗口,上面写着“否”,但数据库中没有设置任何内容,也没有任何内容被发送回服务器


有什么想法吗?

浏览器就是这样工作的。它们不会发送未选中复选框的值


勾选/取消勾选需要根据参数的存在来确定。

问题来自js代码

$(".task-check").bind('change', function(){
  if (this.checked){
    $.ajax({
      url: '/tasks/'+this.value+'/toggle',
      type: 'POST',
      data: {"checked_in": this.checked}
    });
  } 
  else {
    alert("no");
  }  
});
选中/取消选中该框时,将触发changeevent,然后该函数将对此进行测试。选中。如果未选中该框,则返回false,因此您不进入条件内部,而是直接进入调用alert的else


因此,您可能希望删除该条件。

谢谢Antoine。这很有效…我尽我所能学习JS。对子孙后代来说,这是起作用的

app/views/tasks/index.html.erb
不客气。另外,对于下一个问题,如果你想提供一个对你有用的好的解决方案,你应该编辑这个问题,而不是发表另一篇文章。帖子是为回答而保留的,它们的顺序可能会随着时间的推移而改变。
<%- @tasks.each do |task| %>
  <div class="task-wrapper">
    <%= check_box_tag 'checked_in', task.id , task.checked_in, :class => "task-check" %>
    <%= content_tag :span, task.name %>
  </div>
<% end %>
<%= link_to 'New Task', new_task_path %>

  <script>
$(".task-check").bind('change', function(){
    $.ajax({
      url: '/tasks/'+this.value+'/toggle',
      type: 'POST',
      data: {"checked_in": this.checked}
    });
});
  </script>
  def toggle
    @task = Task.find(params[:id])
    @task.update_attributes(:checked_in => params[:checked_in])
    render :nothing => true
  end