【问题标题】:How do I get the value of a checkbox on click如何在单击时获取复选框的值
【发布时间】:2019-09-09 14:33:59
【问题描述】:

我有一个 html 表,每行都有一个动态创建的复选框。复选框的选中状态是根据数据库中的值设置的。在 html 表中选中复选框时,我需要捕捉更改并设置值,以便如果选中该框,则 value=1 否则 value=0。值被传递给更新查询。我不确定如何使用我当前的代码来实现这一点。

HTML:

<?php 
    $sqlGetEmployees = "select e.employeeID, e.lastName, e.firstName, l.number, p.name, e.gradeCertLevel, e.serviceYears, e.step, e.certified from employee e join location l on l.locationID = e.locationID join position p on p.positionID = e.positionID";
    $stmtGetEmployees = mysqli_prepare($db,$sqlGetEmployees);
    mysqli_stmt_execute($stmtGetEmployees);
    mysqli_stmt_bind_result($stmtGetEmployees, $id, $lastName, $firstName, $number, $name, $gradeCertLevel, $serviceYears, $salaryStep, $certified);

    $count = 1; 

   while(mysqli_stmt_fetch($stmtGetEmployees))
   {
        $checkedCertified = ($certified == '1') ? 'checked="checked"':'';
?>
    <tr>
        <!-- other table data -->
        <td> 
            <div id='certified_<?php echo $id; ?>'>
                <input contentEditable='true' class='edit' type='checkbox' id='certified' <?php echo $checkedCertified; ?> />
            </div> 
        </td>
    </tr>
<?php
        $count ++;
    }
    mysqli_stmt_close($stmtGetEmployees);
?>  

脚本:

    // Add Class
    $('.edit').click(function(){
        $(this).addClass('editMode');

    });

    // Save data
    $(".edit").focusout(function(){
        $(this).removeClass("editMode");

        var id = this.id;
        var split_id = id.split("_");
        var field_name = split_id[0];
        var edit_id = split_id[1];

        var value = $(this).text();

        $.ajax({
            url: 'update.php',
            type: 'post',
            data: { field:field_name, value:value, id:edit_id },
            success:function(response){
                console.log('Save successfully');               
            }
        });

    });

更新 PHP

$field = $_POST['field'];
$value = $_POST['value'];
$editid = $_POST['id'];
$checkedStatus = $_POST['checked'];

if($field == "certified")
{
    $sqlUpdateCertified = "UPDATE employee SET ".$field."=? WHERE employeeID= ?";
    $stmtUpdateCertified = mysqli_prepare($db,$sqlUpdateCertified);
    mysqli_stmt_bind_param($stmtUpdateCertified, "ss",$checkedStatus,$editid);
    mysqli_stmt_execute($stmtUpdateCertified);
    mysqli_stmt_close($stmtUpdateCertified);
}

【问题讨论】:

  • 需要捕捉变化并设置值是什么意思?
  • 我假设当该框被初始选中然后单击它时,值会发生变化。当该事件发生时,如果选中,我需要将值设置为 1,如果未选中则设置为 0。
  • @choooper2006 最好使用truefalse

标签: php jquery html


【解决方案1】:

对于动态创建的元素,事件的处理方式如下:

$(document).on('click', '.edit', function(e) {
   //e.preventDefault();
   var checkedStatus = 0;
   if ($(this).is(':checked')) {
       $(this).addClass('editMode');
       checkedStatus = 1;
   } else {
       checkedStatus = 0;
       $(this).removeClass("editMode");
   }  

    var id = this.id;
    var split_id = id.split("_");
    var field_name = split_id[0];
    var edit_id = split_id[1];

    var value = $(this).text();

    $.ajax({
        url: 'update.php',
        type: 'post',
        data: { field:field_name, value:value, id:edit_id, checked: checkedStatus },
        success:function(response){
            console.log('Save successfully');               
        }
    });
});

要将所有内容放在单个事件处理程序中,您可以将所有内容放在 .click 或 .focusout 中,具体取决于您要实现的目标。

【讨论】:

  • 当我进行这些更改时,由于e.preventDefault();,该框不会在网页上选中或取消选中。这条线的目的是什么?
  • preventDefault 防止触发默认操作,例如,如果您单击
  • @choooper2006 我已经编辑了我的答案,我也忘了在事件处理程序中添加其他内容,现在一切应该都很好
  • 数据库中的值未得到更新。如果我回显使用“checkedStatus”设置的变量,则在 PHP 脚本的末尾要在响应中发回,它是空的。对此有什么想法吗?
  • 感谢您提供示例。转而将问题出在html中。我将其更改为&lt;td&gt; &lt;div&gt;&lt;input contentEditable='true' class='edit' type='checkbox' id='certified_&lt;?php echo $id; ?&gt;' &lt;?php echo $checkedCertified; ?&gt; /&gt;&lt;/div&gt; &lt;/td&gt;。非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-22
  • 1970-01-01
  • 2011-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多