复选框没有返回正确的值jquery / php

时间:2018-06-14 13:07:37

标签: php jquery html mysql

我试图获取复选框的值(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;
    }
  }

4 个答案:

答案 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

&#13;
&#13;
$('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;
&#13;
&#13;