You need to enable JavaScript to run this app. 如何在checkbox选中时通过AJAX发送值1,未选中时发送值0?
优惠活动
大模型
产品
解决方案
定价
更多

如何在checkbox选中时通过AJAX发送值1,未选中时发送值0?

问题根源

  • #hidden_onoff是<label>标签,本身没有val()方法,你给它赋值、取值的操作全部无效
  • 同时绑定了click和change两个事件处理checkbox状态,逻辑冗余
  • AJAX请求是页面加载时直接触发,没有和checkbox状态变化、表单提交的动作绑定,拿不到最新的状态值
  • 缺少专门存储开关数值的载体,用label存值本身不符合规范

修复方案

第一步:修改HTML结构,添加隐藏input专门存数值

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form method="post" id="on_off">
  <div class="container">
    <div class="form-check form-check-inline">
      <input id="onoff" type="checkbox" checked="checked" />
      <label class="checkbox-inline" id="onoff_text">ON</label>
      <!-- 新增隐藏input存开关值 -->
      <input type="hidden" id="hidden_onoff" value="1">
    </div>
  </div>
</form>

第二步:修改JS逻辑,合并事件、绑定触发时机

// 合并成一个change事件处理状态更新
$("#onoff").change(function() {
  const isChecked = $(this).is(':checked');
  // 更新显示文本
  $("#onoff_text").text(isChecked ? "ON" : "OFF");
  // 更新隐藏域的值
  $("#hidden_onoff").val(isChecked ? "1" : "0");
  
  // 状态变化时自动提交AJAX,如果是要表单提交时触发就把这段放到表单submit事件回调里
  $.ajax({
    url: "/on_off",
    method: "POST",
    data: {
      onoff: $("#hidden_onoff").val(),
    },
    success: function(data) {
      // 处理返回结果
    }
  });
});

简化方案(不需要隐藏域的写法)

如果不想加额外的隐藏域,提交时直接读取checkbox的checked属性判断值即可,代码更精简:

$("#onoff").change(function() {
  const isChecked = $(this).is(':checked');
  $("#onoff_text").text(isChecked ? "ON" : "OFF");
  
  $.ajax({
    url: "/on_off",
    method: "POST",
    data: {
      onoff: isChecked ? "1" : "0",
    },
    success: function(data) {}
  });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 11:18:04