我有一些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是正确的,但无论我切换多少,都检查它总是正确的。
可能出现什么问题?
由于
答案 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();
}