2012-07-01 53 views
3

我有这样的代码在JS:如果在JavaScript的条件不工作

if($('.log input:checked')) 
    { 
     alert('login checked'); 
     alert('do what you want'); 
    } 
    else 
    { 
    alert('login not checked'); 
     alert('you can not do what you want'); 
} 

但它不能正常工作。 IF ELSE条件是否错误?

回答

5
if($('.log input').is(':checked')) { // true/false 

您可以在jQuery的方式使用.is()(它的描述),并返回一个布尔对匹配的元素。 但您也可以使用JS .length属性。

一个更好的解决方案(由@macek好心建议)

if($('.log input').prop('checked')) { // true/false 
+0

太棒了,这是工作,非常感谢。 7分钟后,我会打勾你的答案;),因为我必须等待。 – johnnyb3000

+0

不客气@ johnnyb3000 –

+0

jQuery的'.prop()'为此。 –

0

虽然使用:checked是测试的最佳方式,如果一个单选按钮被选中,你也可以简单地检查是否有$('.log input:checked')任何长度。

if($('.log input:checked').length) { 
    alert('login checked'); 
} else { 
    alert('login not checked'); 
} 

这是从if条件完全不同的,因为length或者返回检查元件(指示TRUE)或0(零)指示FALSE的数量。

在您的示例中,if($('.log input:checked'))将始终生成一个非FALSE结果,无论单选按钮是否被选中,该结果都会显示login checked消息。

0

你应该使用.prop()这个。它将返回一个true|false值。

if ($('.log input').prop('checked')) { ... 

http://api.jquery.com/prop/

0

试试这个小插件:

插件:

(function($) { 

    $.fn.eachChequed = function(fnc, fnnc) { 

     var 
      ck = $(this).filter('[type="checkbox"], [type="radio"]'), 
      isFnc = $.isFunction(fnc), 
      isFnnc = $.isFunction(fnnc); 

     function callFnc(el) { 
      if (isFnc) { 
       return fnc.call(el); 
      } 
      return true 
     } 

     function callFnnc(el) { 
      if (isFnnc) { 
       return fnnc.call(el); 
      } 
      return true; 
     } 

     ck.each(function(i, el) { 
      try { 
       var r = $(el).is(':checked') ? callFnc(el) : callFnnc(el); 
       return r; 
      } catch (e) {} 
     }); 
    }; 

})(jQuery); 

运行:

$('input').eachChequed(function(){ 

    console.log('checked', $(this)); 

},function(){ 

    console.log('no checked', $(this)); 

}); 

测试:link