You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bootstrap Switch未勾选时AJAX仍传递'on'值的问题解决求助

问题描述

我有一个包含两个Bootstrap开关的简单表单,代码如下:

<div class="row mt-5">
    <div class="col-xl-3">
        <h5>Minutes</h5>
        <div class="div ml-3">
            <div class="form-check form-switch" >
                <input class="form-check-input minutes" type="checkbox" id="minutes" name="minutes">
            </div>
        </div>
    </div>
    <div class="col-xl-3">
        <h5>Accounts</h5>
        <div class="div ml-3">
        <div class="form-check form-switch" >
                <input class="form-check-input minutes" type="checkbox" id="accounts" name="accounts">
            </div>
        </div>
    </div>
    <div class="col-xl-6 pt-3">
        <button class="btn btn-success btn-lg float-end" type="submit" onclick="addEntry();" name="record" id="record"> <i class="fas fa-save"></i> Record</button>
    </div>
</div>

对应的脚本如下:

<script>
function addEntry() {
    jQuery.ajax({
    url: "do-add-data.php",
    data:'+'accounts='+$("accounts").val()+'&minutes='+$("minutes").val(),
    type: "POST",
    success:function(data){
    $("#addrecord").html(data);
    },
    error:function (){}
    });
    }
</script>

无论开关是否勾选,在do-add-data.php中获取到的accounts和minutes值始终为'on',需解决该问题。

解决方案

问题根源是复选框的.val()方法默认返回'on',与勾选状态无关。同时原脚本存在选择器语法错误(缺少#),需同步修正:

  • 核心修复:判断复选框勾选状态传递值
    放弃直接用.val(),改用is(':checked')判断状态,传递明确的布尔或数值型值,同时用对象形式组织data(jQuery会自动处理编码,避免拼接错误):

    function addEntry() {
        jQuery.ajax({
            url: "do-add-data.php",
            data: {
                accounts: $("#accounts").is(':checked') ? 1 : 0,
                minutes: $("#minutes").is(':checked') ? 1 : 0
            },
            type: "POST",
            success:function(data){
                $("#addrecord").html(data);
            },
            error:function (){}
        });
    }
    
  • 可选优化:给复选框设置明确value属性
    若想保留.val()的使用方式,可先给复选框添加value属性,再结合勾选状态判断:

    <!-- 修改后的Minutes开关 -->
    <input class="form-check-input minutes" type="checkbox" id="minutes" name="minutes" value="1">
    <!-- 修改后的Accounts开关 -->
    <input class="form-check-input minutes" type="checkbox" id="accounts" name="accounts" value="1">
    

    对应脚本调整为:

    data: {
        accounts: $("#accounts").is(':checked') ? $("#accounts").val() : 0,
        minutes: $("#minutes").is(':checked') ? $("#minutes").val() : 0
    }
    
  • 必修复:选择器语法错误
    原脚本中$("accounts")和$("minutes")缺少ID选择器前缀#,会导致无法正确定位元素,上述方案已修正该问题。

内容的提问来源于stack exchange,提问作者Shane Perera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 07:54:56