您不能传递布尔值。当一个表单被发送到服务器时(假设是 POST 方法),如果至少有一个选中的复选框,那么$_POST['my_checkbox']=string("true")在您的情况下将发送一个字符串,true作为string传递,如果没有被选中,那么根本就没有$_POST['my_checkbox'], t.e.isset($_POST['my_checkbox'])результат false
document.querySelector('#form').addEventListener('submit',function(form){// при отправке формы
form.preventDefault();// отменяем отправкуconst data =newFormData();// создаём объект FormDataconst inputs = form.target.querySelectorAll('[name]');// Собираем все инпуты с атрибутом nameif(inputs.length >0){// Если их больше нуля..
inputs.forEach(function(input){// Проходим по ним цикломvar name = input.name;// получаем значение атрибута namevar value = input.value;// получаем значение атрибута valueif(input.type ==='checkbox'){// Если инпут == чекбоксу, то..
value = input.checked;// в переменную value записываем его состояние checked (true || false)}
data.append(name, value);// добавляем это в FormData})}
console.info(data);// Вот тут отправляем данные на серверreturnfalse;})
您不能传递布尔值。当一个表单被发送到服务器时(假设是 POST 方法),如果至少有一个选中的复选框,那么
$_POST['my_checkbox']=string("true")
在您的情况下将发送一个字符串,true作为string传递,如果没有被选中,那么根本就没有$_POST['my_checkbox'], t.e.isset($_POST['my_checkbox'])результат false
如果您的表单中有多个复选框,
<input type="checkbox" name="my_checkbox[]" value="true"> <input type="checkbox" name="my_checkbox[]" value="false">
则会传递一个数组input[type="checkbox"]
如果它没有 state 则被忽略checked === true
,如果有,它会on
在它为value
空时发送,或者value
如果在那里指定了某些内容则发送它自己的值。可以从服务器端仔细检查是否有
name
给定的输入,并true\false
根据可用性将其分配到那里。但我认为这是不正确的,因为。它可能根本不存在。
因此,作为一种选择,我建议在提交表单时重新收集要发送的数据。
写入数据
FormData
,检查那里的可用性input[type="checkbox"]
,并立即发出它的值true\false
,这取决于input.checkbox
它此刻的状态。ps 示例中,数据返回到控制台,用开发工具打开,在snippet中,数据显示歪了。