Javascript 如果复选框为';检查过了吗?

Javascript 如果复选框为';检查过了吗?,javascript,jquery,wordpress,checkbox,Javascript,Jquery,Wordpress,Checkbox,我有一个文本输入,它获取所有复选框中“price”属性的总和。 现在我无法从复选框中获取属性值 以下是我的功能: function sum_options() { var options = []; $("#form-field-1-11-1").attr("price", 500); $("#form-field-1-11-2").attr("price", 500); $("#form-field-1-11-3").attr("price", 0);

我有一个文本输入,它获取所有复选框中“price”属性的总和。 现在我无法从复选框中获取属性值

以下是我的功能:

function sum_options() {
    var options = [];
    $("#form-field-1-11-1").attr("price", 500);
    $("#form-field-1-11-2").attr("price", 500);
    $("#form-field-1-11-3").attr("price", 0);
    $("#form-field-1-11-4").attr("price", 300);
    $("#form-field-1-11-5").attr("price", 500);
    $("#form-field-1-11-6").attr("price", 500);
    $("#form-field-1-11-7").attr("price", 1250);
    $("#form-field-1-11-8").attr("price", 500);
    $("#form-field-1-11-9").attr("price", 700);
    options[0] = $("#form-field-1-11-1");
    options[1] = $("#form-field-1-11-2");
    options[2] = $("#form-field-1-11-3");
    options[3] = $("#form-field-1-11-4");
    options[4] = $("#form-field-1-11-5");
    options[5] = $("#form-field-1-11-6");
    options[6] = $("#form-field-1-11-7");
    options[7] = $("#form-field-1-11-8");
    options[8] = $("#form-field-1-11-9");
    var total = 0;
    $.each(options, function() {
        this.on("change", function() {
            total += this.attr("price");
        });
    });
    $("#sum-field").val(total);
}

谢谢

您只是忘记将返回值解析为一个数字:

parseInt(this.attr("price"));
attr()函数正在返回字符串值。

您的代码比需要的复杂得多

首先,应该使用
data-*
属性将自定义数据分配给元素。创建自己的非标准属性将意味着您的HTML无效,并可能导致其他问题。另外,如果您的代码依赖于
price
属性,那么当页面加载时,它应该在DOM中

其次,不需要构建单个元素的数组。您可以在单个jQuery对象中选择它们,并在单个调用中对它们设置
change()
事件处理程序。在下面的示例中,我按
类对它们进行了分组

最后,您可以通过循环查看
:checked
框并将其价格相加,得到所有价格的总和。试试这个:

$('.checkbox').change(函数(){
var合计=0;
$('.checkbox:checked')。每个(函数(){
总计+=parseFloat($(this).data('price');
});
$(“#总和字段”).val(总计);
});

要获取value属性的值,可以执行以下操作:

$("input[type='checkbox']").val();
或者,如果已为其设置了类或id,则可以:

$('#check_id').val();
$('.check_class').val();
但是,无论是否选中,它都将返回相同的值,这可能会造成混淆,因为它与提交的表单行为不同

要检查是否已选中,请执行以下操作:

if ($('#check_id').is(":checked"))
{
  // it is checked
}

请注意,在
each()
中,此
是一个domeElement,它没有
on()
attr()
方法;在使用
$(this)
调用这些方法之前,需要将其转换为jQuery对象。请参阅下面的我的答案,以获得更完整的答案,该答案还改进了您使用的逻辑。您是否有任何特定原因决定在经过这么长时间后更改已接受的答案?