javascript - jQuery/JavaScript : Click event on a checkbox and the 'checked' attribute

标签 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;
});

我在表单中使用 ajax,然后在必要时将相关复选框上的点击事件触发到另一个部分中的 ajax。表单被很好地插入,点击事件被触发,选中需要被选中的框并触发第二个 ajax,因为复选框的 checked 属性最初是 false.

让我的奶酪凝结的是,如果我取消选中其中一个框。尽管 e.preventDefault()checked 属性在测试前设置为 false,因此 if 语句始终执行 else 语句。我也用 $.is(':checked') 试过了,所以我完全不知所措。

似乎 unchecked -> checked 状态读取原始状态,但 checked -> unchecked 不会。有帮助吗?

最佳答案

B.E.,我知道已经过去一年了,但我想我找到了解决方案,

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

我也遇到了这个问题,我的解决方案是将函数绑定(bind)到 change 函数而不是 click 函数,因为 change 只会在输入的选中属性更新后触发。

希望这对您有所帮助,如果没有,也希望对遇到类似问题时偶然发现这篇文章的任何其他人有所帮助。

关于javascript - jQuery/JavaScript : Click event on a checkbox and the 'checked' attribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2786223/

相关文章:

javascript - 将元素拖放到任何位置?

javascript - 需要帮助创建 jquery 插件

actionscript-3 - 为什么 Actionscript 3 ENTER_FRAME 事件如此疯狂?

javascript - 在 JQuery bool 属性之间切换

javascript - 在 javascript/Jquery Spring MVC 项目中打开一个新窗口

Javascript结束ajax-loader.gif

javascript - 类型错误 : Cannot read property 'name' of null

javascript - 未找到 Firebase Admin SDK 函数

javascript - 多次更改元素的 ID

delphi - 如何在Delphi中捕获DBGrid中的滚动事件