2012-05-14 154 views
0

我正在爲客戶端的應用程序工作。將需要特殊的驗證編碼,所以我不能像在其他幾個應用程序中那樣使用插件。驗證文本的下拉字段時,我有這個代碼工作,但是當我添加代碼來驗證複選框時,它破裂了。我在這個jQuery代碼中做錯了什麼? 我的jsfiddlehttp://jsfiddle.net/justmelat/7N7bw/jquery - 爲什麼沒有:複選框:選中驗證不工作

完整的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; 
       }); 
     }); 

回答

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; 
+0

現在我得到這個錯誤[遺漏的類型錯誤:對象[對象的對象] [對象對象]沒有方法'each'],但我沒有使用.each因爲is()應該檢查是否有任何框被選中。 – user1176783

+0

@ user1176783閱讀我的答案以擺脫錯誤。 – VisioN

+0

我想趕上所需的領域,但沒有填寫,所以在這種情況下,它應該不是檢查 – user1176783

0

嘗試

return $(this).is(!':checked') 
0

有符合一個問題:

var holdAll = reqButEmpty + chkbx_reqButEmpty; 

通過連接兩個JQuery的對象,你會得到類型[Object][Object]

使用此代碼來代替:

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

DEMO:http://jsfiddle.net/7N7bw/2/

0

你可以試試:

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