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