jQuery/Javascript:单击复选框上的事件和"已检查"属性

b. *_*eck 13 javascript jquery events click

代码:

$('input.media-checkbox').live('click', function(e){

    e.preventDefault();
    var that = $(this);

    if (that.attr('checked') == 'checked'){

        var m = that.attr('media');
        var mid = 'verify_' + m;
        that.parents('div.state-container').find('ul.' + mid).remove();
        that.attr('checked', false);
    } else {

        var url = AJAX_URL;

        $.ajax({
           type: 'GET',
           url: url,
           dataType: 'html',
           success: function(data){

                that.parents('li').siblings('li.verification').children('div.media-verification').append(data).fadeIn(500);
                that.attr('checked', 'checked');
           }
        }); 
    }

    return false;
});
Run Code Online (Sandbox Code Playgroud)

我在一个表单中ajaxing,然后在相关的复选框上触发click事件到另一个部分的ajax,如果有必要的话.很好地插入表单,并触发单击事件,检查需要检查的框并触发第二个ajax,因为checked复选框的属性最初是false.

如果我取消其中一个盒子,我的奶酪是什么?尽管如此e.preventDefault(),该checked属性设置为false在测试之前,因此该if语句始终执行该else语句.我也试过这个$.is(':checked'),所以我完全不知所措.

看来unchecked - > checked状态读取原始状态,但是选中 - >未选中则不会.有帮助吗?

A.W*_*ack 15

是的,我知道已经过了一年,但我想我找到了解决方案,

这里的问题是实际调用click事件并在"checked"属性添加到复选框输入之前运行.因此该函数运行,查看输入是否具有"checked"属性,并运行else条件.然后该元素被赋予"已检查"属性.

我也碰到了这个,我的解决方案是将函数绑定到更改函数而不是click函数,因为更改仅在输入更新checked属性后触发.

希望这可以帮助你,如果没有,那么在遇到类似问题时碰巧偶然发现这篇文章的其他人.