如何通过jQuery Ajax正确传递多个复选框的选中值?
解决复选框值获取的问题
嗨,我来帮你搞定这个问题~ 你现在的代码里,$('.checkbox').val()只会返回匹配到的第一个复选框的value,不管它有没有被选中,所以才会出现选第二个或者两个都选时还是返回11的情况。要实现你想要的效果,得从三个地方调整:
1. 修改HTML的复选框
给每个复选框加上相同的name属性,并且用数组格式的命名(checkboxvalue[]),这样不管是表单提交还是AJAX传递,都能正确识别多个选中的值:
<form class="myform" method="post" action=""> <input type="checkbox" class="checkbox" name="checkboxvalue[]" value="11" /><br> <input type="checkbox" class="checkbox" name="checkboxvalue[]" value="22" /><br> <input type="submit" value="Go" /> </form> <div class="response"></div>
2. 调整AJAX代码,获取所有选中的复选框值
用:checked选择器筛选出被选中的复选框,再通过map()和get()把它们的value转成数组:
$(document).ready(function(){ $('.myform').on('submit', function(e){ e.preventDefault(); // 获取所有选中的复选框值,转成数组 var checkboxvalues = $('.checkbox:checked').map(function(){ return $(this).val(); }).get(); $.ajax({ type: "POST", url: '', data: {checkboxvalue: checkboxvalues}, success: function(data){ $('.response').html(data); } }); }); });
3. 修改PHP代码,处理数组格式的参数
现在$_POST['checkboxvalue']会是一个数组,我们可以用implode()把数组元素拼接成字符串输出:
if($_SERVER['REQUEST_METHOD'] == "POST") { $value = ''; if(isset($_POST['checkboxvalue']) && is_array($_POST['checkboxvalue'])){ // 把数组元素用逗号分隔拼接成字符串,你也可以换成其他分隔符 $value = implode(', ', $_POST['checkboxvalue']); } // 如果没有选中任何复选框,提示一下 echo empty($value) ? '没有选中任何复选框' : '选中的值是: ' . $value; exit; }
这样调整之后:
- 只选第一个复选框,会返回「选中的值是: 11」
- 只选第二个,返回「选中的值是: 22」
- 两个都选,返回「选中的值是: 11, 22」
- 都不选的话,会提示「没有选中任何复选框」
内容的提问来源于stack exchange,提问作者mudraya
相关产品推荐
相关产品推荐

