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

如何获取checkbox的选中状态作为变量传入ajax对象中

问题原因

你初始化ajaxObj的时候,options.data.myCheckbox取的是页面刚加载时的静态值,JS的基础类型赋值是值拷贝,后续你修改全局$myCheckbox变量,并不会同步更新ajaxObj.options里存的旧值,所以发请求时永远带的是初始状态。

解决方法

不需要额外维护全局变量存checkbox状态,每次发起AJAX请求前动态读取最新的选中状态写入请求参数即可,修改后代码如下:

// 去掉最开始的全局$myCheckbox定义,不需要额外维护这个变量
var ajaxObj = {
    options: {
        url: pfp_catz_ajax_script.ajaxurl,
        data: {
            action: 'pfp_catz_ajax',
            searchText: searchText,
            theFunction: 'getLocations',
            myCheckbox: false // 初始默认值
        },
        dataType: "json",
        type: 'POST'
    },
    delay: 1000,
    errorCount: 0,
    errorThreshold: 5,
    ticker: null,
    post: function(responseData) {
        console.log('myCheckbox='+jQuery("#myCheckbox").prop('checked'));
        if(ajaxObj.errorCount < ajaxObj.errorThreshold) {
            ajaxObj.ticker = setTimeout(getMarkerData, ajaxObj.delay);
        }
    },
    fail: function(jqXHR, textStatus, errorThrown) {
        console.log("This is the error: "+errorThrown);
        ajaxObj.errorCount++;
    }
};

// 修改AJAX请求方法,每次请求前更新参数
function getMarkerData() {
    // 动态获取最新的checkbox状态写入请求参数
    ajaxObj.options.data.myCheckbox = jQuery("#myCheckbox").prop('checked') ? 1 : 0;
    jQuery.ajax(ajaxObj.options)
        .done(setMarkers)
        .fail(ajaxObj.fail)
        .always(ajaxObj.post);
}

setMarkers(locs);
ajaxObj.post();

// 监听事件里不需要再维护全局变量,删掉赋值逻辑即可
jQuery("#legend").on('click', '#myCheckbox',function(){
    if(jQuery(this).is(':checked')) {
        alert('myCheckbox checked');
    } else {
        alert('myCheckbox unchecked');
    }
});

补充说明

如果你一定要保留全局$myCheckbox变量的写法,也可以在checkbox的点击事件里,同时更新ajaxObj.options.data.myCheckbox = $myCheckbox,但是直接动态读DOM状态的方案更稳妥,不会出现变量和实际DOM状态不同步的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 20:15:04