如果我发出警报,jquery IF的行为会有所不同

时间:2013-09-10 14:51:03

标签: javascript jquery

我想禁用我的班级中未选中复选框的所有元素。 但即使这被检查,我的if也会返回false。

$('.myClass').each(function(i, obj) {
  if (!$j('input[name='+obj.id+']').is(':checked')){  
    $j('#desc_'+obj.id).attr('disabled','disabled');              
  }        
});

但是,如果我在if中发出警报,它的作品!

$('.myClass').each(function(i, obj) {
  if (!$j('input[name='+obj.id+']').is(':checked')){  
    alert($j('input[name='+obj.id+']').is(':checked'));
    $j('#desc_'+obj.id).attr('disabled','disabled');              
  }        
});

任何人都知道为什么?

3 个答案:

答案 0 :(得分:5)

开发人员倾向于使用console.log,而alert()的行为则不同,因为在警报点击“确定”按钮之后,DOM才会完全加载。

考虑使用:

$('.myClass').each(function(i, obj) {
      if (!$j('input[name='+obj.id+']').is(':checked')){  
        console.log($j('input[name='+obj.id+']').is(':checked'));
        $j('#desc_'+obj.id).prop('disabled','disabled');              
      }        
    });

有关更多信息和文档,请参阅:

What is console.log and how do I use it?

https://developer.mozilla.org/en-US/docs/Web/API/console.log

编辑:

我也会考虑使用.prop而不是.attr,主要的区别和原因在这里突出显示:

.prop() vs .attr()

我重新发明轮子没有意义!

答案 1 :(得分:0)

看起来你引用了jQuery错误。试试这个:

$('.myClass').each(function(i, obj) {
    if (!$('input[name='+obj.id+']').is(':checked')){  
        $('#desc_'+obj.id).attr('disabled','disabled');              
    }        
});

区别是.. $ j(.. vs .. $(..

答案 2 :(得分:-1)

确保您的代码包含在$(function(){...}

$(function() {
  $('.myClass').each(function(i, obj) {
    if (!$j('input[name='+obj.id+']').is(':checked')){  
      $j('#desc_'+obj.id).attr('disabled','disabled');              
    }        
  });
});