3

我在 JS 中有这段代码:

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 条件是否错误?

4

4 回答 4

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

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

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

if( $('.log input').prop('checked') ) { // true/false
于 2012-07-01T22:11:06.367 回答
0

虽然 using: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无论是否选中单选按钮,都应显示消息。

于 2012-07-01T22:20:08.437 回答
0

您实际上应该.prop()为此使用。它将返回一个true|false值。

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

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

于 2012-07-01T22:22:27.540 回答
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));

});   

测试:链接

于 2012-07-01T22:47:54.860 回答