我有一个应用程序,用户将检查输入复选框,该值将被发送到数据库而无需重新加载页面;它做的。但是,当我取消选中相同元素的隐藏类型时;其中包含值0,未提交,而是仍然从复选框中提交值1。
输入是动态创建的:
function build_something(it, src){
var something = it;
var htag = it+"-header";
var ctr = document.createElement('div');
ctr.setAttribute('class', 'interest_container');
var lbl = document.createElement('label');
lbl.setAttribute('for', something);
var img = document.createElement('img');
img.setAttribute('src', src);
var title = document.createElement('h2');
title.setAttribute('id', htag);
var inp_f =document.createElement('input');
inp_f.setAttribute('type', 'hidden');
inp_f.setAttribute('name', something);
inp_f.setAttribute('value', 0);
var inp = document.createElement('input');
inp.setAttribute('type', 'checkbox');
inp.setAttribute('id', something);
inp.setAttribute('name', something);
inp.setAttribute('value', 1);
lbl.appendChild(img);
ctr.appendChild(lbl);
ctr.appendChild(inp_f);
ctr.appendChild(inp);
ctr.appendChild(title);
var elem = document.getElementById('idk');
elem.appendChild(ctr);
document.getElementById(htag).innerHTML = it;
}
绑定最近的元素抓取输入和onchange
post checked元素:
$('#interests').on('change', 'input', function (e){
e.preventDefault();
$.ajax({
type: 'POST',
url: 'some.php',
async: true,
data: $(this).serialize(),
success: function (msg) {
console.log(msg);
}
});
})
storeData是some.php
调用的函数:
function storeData($form_data, $table_name, $cxn){
if(!is_array($form_data)){
return false;
exit();
}
$types = str_repeat("s", count($form_data));
$params = array();
$params[] = &$types;
$keys = array_keys($form_data);
$values = array_values($form_data);
for ($i = 0; $i < count($values); $i++) {
$params[] = &$values[$i];
}
$sql = "INSERT INTO $table_name (" . implode(',', $keys) . ") VALUES (" .
implode(',', array_fill(0, count($values), '?')) . ")
ON DUPLICATE KEY UPDATE ";
$updates = implode(',', array_map(function($col) {
return "$col = VALUES($col)";
}, $keys));
$sql .= $updates;
$stmt = mysqli_prepare($cxn, $sql);
call_user_func_array(array($stmt, 'bind_param'), $params);
return mysqli_stmt_execute($stmt);
}
当我检查输入框时,它会提交值并存储它;但是,当我取消选中相同的元素时,它应该发送一个值0,但它不会。
编辑:我的问题不同,因为其他解决方案建议下拉列表。我不要那个。