服务器始终报告检查为真?

时间:2013-03-05 18:29:35

标签: javascript ajax jquery

我有一些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'始终为true。 id是正确的,但无论我切换多少,都检查它总是正确的。

可能出现什么问题?

由于

3 个答案:

答案 0 :(得分:1)

尝试使用

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

$(this).prop('checked')

答案 1 :(得分: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 () {}
    });
});

答案 2 :(得分:0)

  

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

我有预感,这不是你的javascript中的问题。但也许你的服务器得到的这些值并没有正确读取它们。

假设您有2个请求:

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

现在,如果你的服务器编码像这样的伪代码:

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

然后你有问题。这是因为params.checked是一个字符串,可以是字符串"true",也可以是字符串"false"。在大多数语言中,"false"是一个真正的值,就像任何非空字符串一样。

你需要更像这样的东西,它会查找字符串"true"以进行检查。

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