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
相关产品推荐
相关产品推荐

