当未经检查的jQuery时,Checkbox仍然显示为true

时间:2014-10-13 15:16:00

标签: javascript jquery checkbox

好的,我现在遇到了$ .prop('已检查')功能的问题。当取消选中我的一些盒子并使用此功能读取复选框时,当其中一些盒子应该显示为未选中时,所有这些盒子仍然显示为true。检查这个功能的部分在下面,但是有些背景:我在每个td元素中使用带有输入值的表,并且由于它的编写方式,我不得不聚集所有info / validate /并使用td.each()函数进行检查。

    $("td", ele).each(function(idx){
            var before  = $('.e_content', this),
                b_name  = $('input:last[type!="hidden"], textarea:last, checkbox:last, select:last', this).attr('name'),
                b_val   = $('input[name="'+b_name+'"], select:last, textarea[name="'+b_name+'"]', this).val(),
                b_chx   = $('input:checkbox[name="'+b_name+'"]', this).prop('checked'),
                after   = function(){
                    before.hide();
                    $(ele).css("background", color);
                    $('td.edit', ele).show();
                    $('td.save', ele).hide();
                    $('span', this)
                        // WORKING ON TAKING THE VALUE OF THE .e_content FORM AND REPLACING THE SPAN WITH IT
                        .html(function(){
                            console.log(b_name+' : '+b_chx);
                            if(b_val != undefined && b_val != ''){
                                if(b_name == 'StageType'){
                                    if(b_val == 1){ return 'Voice'; }
                                    if(b_val == 2){ return 'Text'; }
                                    if(b_val == 3){ return 'Email'; }
                                }
                                else if(b_name == 'qtrhour') {
                                    return $('select', before).find(':selected').text();
                                }
                                else if(b_chx == true) { return '✓'; }
                                else if(b_chx == false) { return '✗'; }
                                else {
                                    if(before.find('input:last').prop('type') != 'checkbox')
                                        return b_val.replace(/\n\r?/g, '<br />');
                                }
                            }




                        })
                        .show();
                };
            $(this).html(after);
        }); 

问题在于这一行:

b_chx   = $('input:checkbox[name="'+b_name+'"]', this).prop('checked'),

即使在按下保存按钮之前取消选中复选框,它也会一直显示为真。此函数将触发.save单击事件。希望这足以确定可能出现的问题。

2 个答案:

答案 0 :(得分:0)

您可以尝试以下方法,

 $('input:checkbox[name="'+b_name+'"]', this).is(':checked');

答案 1 :(得分:0)

为了避免检查或取消选中复选框的问题,我通常使用jQuery.attr()

$(...).attr('checked')
$(...).attr('checked','checked')
$(...).removeAttr('checked')

有时我会检查或取消选中它们绑定或触发.click()函数。