我试图获取复选框的值(true或false)并更新while函数中的行的数据库。但是,复选框似乎只根据第一行注册值的更改。例如,如果选中第1行复选框,则value = true。然后我可以单击以下行并获取复选框值true。但是,当我单击第一行之外的行以获得false时,它将仅在首先取消选中第一行复选框时才会注册。我认为这与行id有关,但是尝试了很长时间来修复它但无法修复它。请帮忙。
HTML / PHP
while($row = $result->fetch_assoc()) {
echo
'
<input type="checkbox" name="home['.$row["id"].']" id="'.$row["id"].'" '.($row["home"]>0 ? 'checked="checked"' : '').'>
<label for="'. $row["id"].'"></label>
JQUERY
$(document).ready(function(){
$('input[type="checkbox"]').on("click", function(){
var on = $('input[type="checkbox"]').prop("checked");
$.post("work/updateaddress.php",{home:on,id:this.id});
});
});
PHP / MYSQL
if ($home == 'true') {
$check = date("Ymd");
} else {
$check = '';
}
if(isset($_POST["home"])) {
$sql = "UPDATE addresses SET home='$check' WHERE id='$id'";
if($mysqli->query($sql) === TRUE){
} else {
echo "error" . $sql . "<br>".$mysqli->error;
}
}
答案 0 :(得分:6)
问题是因为您选择了点击处理程序中的所有复选框,然后访问该集合上的prop()
,这只会返回第一个的值。
相反,请使用this
关键字来引用引发事件的复选框。出于可访问性原因,您还应使用change
事件而不是click
:
$('input[type="checkbox"]').on('change', function(){
var on = $(this).prop("checked"); // or just this.checked
$.post("work/updateaddress.php", {
home: on,
id: this.id
});
});
答案 1 :(得分:1)
您应该使用change
事件而非click
事件作为复选框。
$('input[type="checkbox"]').on('change', function(){
var on = this.checked
console.log(on)
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="checkbox" value="a">
答案 2 :(得分:0)
//使用this
来引用被点击的框:
$(document).ready(function(){
$('input[type="checkbox"]').on("click", function(){
var on = $(this).prop("checked");
$.post("work/updateaddress.php",{home:on,id:this.id});
});
});
答案 3 :(得分:0)
或者更改,您可以使用input
$('input[type="checkbox"]').on('input', function(e){
let thisCheckbox = e.target.checked
alert(thisCheckbox)
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="checkbox" name="row1" id="row1" checked="checked">
<label for="row1">row1</label>
&#13;