您不能传递布尔值。当一个表单被发送到服务器时(假设是 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 = new FormData(); // создаём объект FormData
const inputs = form.target.querySelectorAll('[name]'); // Собираем все инпуты с атрибутом name
if(inputs.length > 0) { // Если их больше нуля..
inputs.forEach(function(input) { // Проходим по ним циклом
var name = input.name; // получаем значение атрибута name
var value = input.value; // получаем значение атрибута value
if(input.type === 'checkbox') { // Если инпут == чекбоксу, то..
value = input.checked; // в переменную value записываем его состояние checked (true || false)
}
data.append(name, value); // добавляем это в FormData
})
}
console.info(data);
// Вот тут отправляем данные на сервер
return false;
})
您不能传递布尔值。当一个表单被发送到服务器时(假设是 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中,数据显示歪了。