0

我有一些 JS 将选中的回调添加到 div 中的复选框并在这种情况下执行 ajax 调用:

$("#filter").on('change', '[type=checkbox]', function () {

    $.ajax({
        type: "POST",
        url: "CalendarServices.aspx/UpdateFilter",
        data: 'id=' + this.value + '&checked=' + this.checked,
        success: function (data) {
            $('#calendar').fullCalendar('refetchResources');
        },
        error: function () {}
    });

但是,当我检查 ajax 调用的 POST 值时,'checked' 总是正确的。id 是正确的,但无论我切换多少,检查总是正确的。

有什么问题?

谢谢

4

3 回答 3

1

尝试使用

$(this).is(':checked')

或者

$(this).prop('checked')
于 2013-03-05T18:34:04.107 回答
0

您是否尝试移出 this.checked 以查看 ajax 是否不会影响它。只需使用警报测试 onchange,它就可以工作。

$("#filter").on('change', '[type=checkbox]', function () {
    // dirty but works...
    var datas = 'id=' + this.value + '&checked=' + this.checked;
    console.log(this.checked);

    $.ajax({
        type: "POST",
        url: "CalendarServices.aspx/UpdateFilter",
        data: datas,
        success: function (data) {
            $('#calendar').fullCalendar('refetchResources');
        },
        error: function () {}
    });
});
于 2013-03-05T18:39:25.813 回答
0

但是,当我检查 ajax 调用的 POST 值时,'checked' 总是正确的。id 是正确的,但无论我切换多少,检查总是正确的。

我有一种预感,这在您的 javascript 中不是问题。但也许是您的服务器获取了这些未正确读取的值。

假设您有 2 个请求:

/foo/bar?checked=true
/foo/bar?checked=false

现在,如果您的服务器编码如下伪代码:

if (params.checked) {
  doStuffWhenChecked();
} else {
  doStuffWhenNotChecked();
}

那你就有问题了。这是因为params.checked将是一个字符串,它是 string"true"或 string "false"。在大多数语言"false"中,它是一个真值,任何非空字符串也是如此。

你需要更像这样的东西,它寻找字符串"true"来做检查的事情。

if (params.checked == "true") {
  doStuffWhenChecked();
} else {
  doStuffWhenNotChecked();
}
于 2013-03-05T18:40:40.270 回答