首页 > 解决方案 > 复选框在 formData 中仅返回 0

问题描述

<input type="hidden" value="0" name="visa">
<input type="checkbox" value="1" name="visa">

阿贾克斯:

var formData = new FormData(document.getElementById("update-form"));
             $.ajax({
                type: "POST",
                url: "teachers/" + $('#update-data').attr("value"),
                headers: {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
          },
                data:formData,
                processData: false,
                contentType: false,
                cache: false,
            success: function (data) {
            alert("updated");
            }
            });

即使我的复选框被选中或未选中,我也会得到 0。

如果我添加以下代码,它会显示0 0在控制台中。1如果它被选中,它应该返回。

for (var pair of formData.entries()) {
        console.log(pair);
}

标签: ajaxlaravel

解决方案


您可以使用 .is(':checked')

在你的 html

<input type="hidden" value="0" name="visa" id="hiddenInput">
<input type="checkbox" value="1" id="myCheckbox">

在你的 js

$("#myCheckbox").on('change',function(){
    if($("#myCheckbox").is(':checked'))
        $('#hiddenInput').val(1);  
    else{
         $('#hiddenInput').val(0);  
    }
});

如果你有多个复选框,让我们在下面这样说

<input type="checkbox" id="hiddenInput1">
<input type="checkbox" id="hiddenInput2">

您可以循环复选框并附加到您的数据

在ajax上面添加这一行

var checkbox = $("#myForm").find("input[type=checkbox]");

$.each(checkbox, function(key, val) {
    formData.append($(this).attr('id'), this.is(':checked'))
});

推荐阅读