我的 update.js.erb 文件仅在第一次单击按钮时运行,而不是在后续单击时运行(更改按钮的 class 和单击值)
My update.js.erb file only runs on the first button click and not on subsequent clicks (change a button's class and value on click)
我有一个带有 complete/incomplete 任务按钮的待办事项列表应用程序。我想在单击按钮 class 和按钮值更改之间切换。我得到了改变第一次点击的按钮,但随后点击同一个按钮不会改变按钮。我检查了日志,第一次点击后调用了 todo#update 方法,但它似乎不是 运行 我在 update.js.erb 中的 javascript 代码。
在我的 update.js.erb 文件中:
// change color
$("#todo-button-<%=@todo_id%>").attr('class', "<%=button_class%>");
// change button text
$("#todo-button-<%=@todo_id%>").attr('value', "<%=button_status%>");
这是 index.html.erb
中的按钮
<%= button_to button_status,
update_todo_path( todo_id: todo["id"],
description: todo["description"],
is_complete: todo["is_complete"]
),
remote: true,
class: "#{button_class}",
id: "todo-button-#{todo["id"]}"%>
我最终通过使用点击功能解决了这个问题。我的代码比我想要的更冗长但有效:
$('.todo-button').click(function(){
if($(this).hasClass("btn-primary")){
$(this).removeClass("btn-primary");
$(this).addClass("btn-success");
$(this).val("Incomplete");
}else if($(this).hasClass("btn-success")){
$(this).removeClass("btn-success");
$(this).addClass("btn-primary");
$(this).val("Complete");
}
});
我有一个带有 complete/incomplete 任务按钮的待办事项列表应用程序。我想在单击按钮 class 和按钮值更改之间切换。我得到了改变第一次点击的按钮,但随后点击同一个按钮不会改变按钮。我检查了日志,第一次点击后调用了 todo#update 方法,但它似乎不是 运行 我在 update.js.erb 中的 javascript 代码。
在我的 update.js.erb 文件中:
// change color
$("#todo-button-<%=@todo_id%>").attr('class', "<%=button_class%>");
// change button text
$("#todo-button-<%=@todo_id%>").attr('value', "<%=button_status%>");
这是 index.html.erb
中的按钮<%= button_to button_status,
update_todo_path( todo_id: todo["id"],
description: todo["description"],
is_complete: todo["is_complete"]
),
remote: true,
class: "#{button_class}",
id: "todo-button-#{todo["id"]}"%>
我最终通过使用点击功能解决了这个问题。我的代码比我想要的更冗长但有效:
$('.todo-button').click(function(){
if($(this).hasClass("btn-primary")){
$(this).removeClass("btn-primary");
$(this).addClass("btn-success");
$(this).val("Incomplete");
}else if($(this).hasClass("btn-success")){
$(this).removeClass("btn-success");
$(this).addClass("btn-primary");
$(this).val("Complete");
}
});