Javascript 为什么选中复选框';美国的状态不变吗?

Javascript 为什么选中复选框';美国的状态不变吗?,javascript,jquery,ajax,dom,checkbox,Javascript,Jquery,Ajax,Dom,Checkbox,单击复选框将向服务器发送ajax请求,下面是我如何处理切换: toggleDefault: function(e) { e.preventDefault(); var url = $(e.target).data('target'); var value = $(e.target).attr('checked') ? 0 : 1; $.post(url, {value: value})

单击复选框将向服务器发送ajax请求,下面是我如何处理切换:

toggleDefault: function(e) {
            e.preventDefault();
            var url = $(e.target).data('target');
            var value = $(e.target).attr('checked') ? 0 : 1;
            $.post(url, {value: value})
                .done(function() {
                    value ? $(e.target).attr('checked', true) : $(e.target).removeAttr('checked');
                })
                .error(function() {
                    alert('There is an error processing request, please try again.');
                })
        }
禁用事件确实可以正常工作。但是当谈到enable事件时,我可以看到
$(e.target).attr('checked',true)
操作更改了复选框dom。但UI上的复选框仍然未选中。


如何解决此问题?

您不应该更改属性,它将不起作用。改为更改
属性
(检查“属性与属性”部分):

或者,如果简化,它将只是:

.done(function() {
    $(e.target).prop('checked', Boolean(value));
})
还更改了此行
var value=$(e.target).attr('checked')?0 : 1;
var值=$(e.target)。是否(':checked')?0 : 1;


希望这能奏效

我对你的代码做了一些编辑。问题是您正在使用
e.eventpreventDefault()因此您的
:已选中
-切换无法工作。每次调用事件时,浏览器都会将其设置为默认值

$(“#ckb”)。单击(函数(e){
//切换默认值:函数(e){
//e.预防违约();
var url=$(e.target).data('target');
var值=$(e.target).prop('checked')?0:1;
$.post(url,{value:value})
.done(函数(){
如果(值==0){
$(e.target).prop('checked',true);
}否则{
$(e.target).prop('checked',false);
}
})
.错误(函数(){
警报('处理请求时出错,请重试');
})
//}
});

JS-Bin
设置为默认值

谢谢,但我以前试过。问题是:第一次就可以了。但是,当我第二次单击复选框而不刷新页面时,
$(e.target).attr('checked')
获得的值将是错误的。请使用
prop
属性阅读:
$(e.target).prop('checked')
。当您更改/读取checked属性时,它只影响复选框的默认(因此是初始)状态,而不是当前状态。我再次尝试了您的方法,发现复选框的dom以这种方式保持不变。那么您知道如何更改复选框的当前状态吗?或者我必须刷新页面吗?
var value=$(e.target)。是否(':checked')?0 : 1;无法获取正确的状态。选中时,您希望0;未选中时,您希望1正确?是这样吗?是的。但我在未选中时得到0。确定然后切换值:
var value=$(e.target)。是否(':checked')?1 : 0;这是工作。哇。这就是棘手的部分@MarvinHeilemann和Deepak非常感谢你们两位,谢谢。你能告诉我什么地方我能弄清楚
preventDefault
是如何阻止我读取当前状态的吗?
.done(function() {
    $(e.target).prop('checked', Boolean(value));
})
.done(function() {
   value ? $(e.target).prop('checked', true) : $(e.target).prop('checked', false);
})