我正在努力使用Jquery,因此希望获得有关优化我的脚本的方法的反馈。
为了简要描述功能,我有一个“checkall”复选框和一个用于对已检查元素执行操作的按钮。如果没有选中元素,则应禁用我的按钮并添加类禁用。如果只检查了一个元素,则不应禁用该按钮,也不禁用该类。
提前致谢
$(document).ready(function(){
$('#checkall').click(function () {
$(this).parents('.table_form:eq(0)').find(':checkbox').attr('checked', this.checked);
if($(this).parents('.table_form:eq(0)').find(':checkbox').is(':checked')) {
$("#delete_selected").attr("disabled");
$("#delete_selected").removeClass("disabled");
} else {
$("#delete_selected").removeAttr("disabled").addClass("disabled");
}
});
$("#blog_posts tbody :checkbox").click(checked_status);
});
function checked_status() {
var n = $("input:checked").length;
if(n > 0) {
$("#delete_selected").attr("disabled");
$("#delete_selected").removeClass("disabled");
} else {
$("#delete_selected").removeAttr("disabled").addClass("disabled");
}
}
答案 0 :(得分:2)
我在这里没有太多关于优化的说法,但可能是你试图将其设置为禁用:
$("#delete_selected").attr("disabled"); // won't work, simply returns true or false
应该是:
$("#delete_selected").attr("disabled", true); // or "disabled"
你可以使用链接:
$("#delete_selected").attr("disabled", true)
.removeClass("disabled");
请参阅http://api.jquery.com/attr/
另外,这个条件:
if($(this).parents('.table_form:eq(0)').find(':checkbox').is(':checked')) {
可以更改为更简洁:
if($(this).closest('.table_form').find(':checkbox:checked').length) {
但这确实是一种偏好。