0

我正在为客户开发一个应用程序。需要特殊的验证编码,所以我不能像在其他几个应用程序中那样使用插件。我在验证文本和下拉字段时让这段代码工作,但是当我添加代码来验证复选框时它就坏了。我在这个 jquery 代码中做错了什么?我的 jsFiddle:http: //jsfiddle.net/justmelat/7N7bw/

完整的jquery代码:>>

$(document).ready(function(){
    $("#btnCatchReqFlds").on('click', function(){
        $("#holdErrMsg").empty();
        var reqButEmpty = $('fieldset:visible').find('input[type="text"][class*="-required"],textarea[class*="-required"],select[class*="-required"]').filter(function() 
            {
                    return $.trim($(this).val()) === "";
            });
        var chkbx_reqButEmpty = $('fieldset:visible').find('input[type="checkbox"][class*="-required"]').filter(function() 
            {
                    return !$(this).is(':checked')
            });
                    var holdAll = reqButEmpty + chkbx_reqButEmpty;
                    if(holdAll.length > 0)
                        {
                            holdAll.each(function() {
                                $('#holdErrMsg').append("Please fill in the " + this.name + "<br />"); 
                            });
                        }
                    return !holdAll.length;
                });
        });

上面一直在工作,直到我添加了这个复选框验证:>>

var chkbx_reqButEmpty = $('fieldset:visible').find('input[type="checkbox"][class*="-required"]').filter(function() 
            {
                    return !$(this).is(':checked')
            });
                    var holdAll = reqButEmpty + chkbx_reqButEmpty;

这是带有新建议的 jquery - 但不起作用>>

$(document).ready(function(){
    $("#btnCatchReqFlds").on('click', function(){
        $("#holdErrMsg").empty();
        var reqButEmpty = $('fieldset:visible').find('input[type="text"][class*="-required"],textarea[class*="-required"],select[class*="-required"]').filter(function() 
            {
                    return $.trim($(this).val()) === "";
            });
        //var chkbx_reqButEmpty = $('fieldset:visible').find('input[type="checkbox"][class*="-required"]').filter(function() 
        var chkbx_reqButEmpty = $('fieldset:visible').find('input:checked[class*="-required"]').filter(function() 
            {
                    console.log(this);
                    //return !$(this).is(':checked')
                    //return !this.checked;
                    return $(this).is(!':checked');
            });
                    //var holdAll = reqButEmpty + chkbx_reqButEmpty;
                    //var holdAll = reqButEmpty.concat(chkbx_reqButEmpty).length;
                    var holdAll = $.extend(reqButEmpty,chkbx_reqButEmpty);
                    if(holdAll.length > 0)
                        {
                            holdAll.each(function() {
                                $('#holdErrMsg').append("Please fill in the " + this.name + "<br />"); 
                            });
                        }
                    return !holdAll.length;
                });
        });
4

4 回答 4

0

(input:checked)在你的查找功能中尝试过吗?

$('fieldset:visible').find('input:checked[class*="-required"]').filter(function(){});

编辑 :

这行不应该:return !$(this).is(':checked')return $(this).is(':checked')

编辑 :

if(!$(this)is(':checked')
    return true/false;
于 2012-05-14T14:06:31.470 回答
0

尝试

return $(this).is(!':checked')
于 2012-05-14T14:08:32.883 回答
0

你可以试试:

var chkbx_reqButEmpty = $('fieldset:visible').find('input[type="checkbox"][class*="-required"]').filter(function() {
      return !this.checked;
});
var holdAll = reqButEmpty.concat(chkbx_reqButEmpty).length;
于 2012-05-14T14:14:43.933 回答
0

线路有问题:

var holdAll = reqButEmpty + chkbx_reqButEmpty;

通过连接两个 JQuery 对象,您可以得到 type [Object][Object]

请改用此代码:

var holdAll = $.extend(reqButEmpty,chkbx_reqButEmpty);

演示:http: //jsfiddle.net/7N7bw/2/

于 2012-05-14T14:09:43.840 回答