2010-08-20 148 views
0

我正在驗證一些字段,並檢查一個選擇元素的長度是否大於0.我得到的錯誤「'長'是空或不是一個對象」,因爲ID $ = SelectResult是一個列表框,可以沒有值和因此返回null和var val = $(this).val();不喜歡那樣。如果變量爲null,則用jQuery將該值設置爲0?

function checkControls() { 
    var itemLevel = $("select[title='Item Level']").val(); 
    switch (itemLevel) { 
    case 'Strategic Objective': 

var controlsPassed = 0; 


    $("input[id$=UserField_hiddenSpanData],input[title=Title],select[id$=SelectResult]").each(function(){ 


     var val = $(this).val(); 
     if(val != 0 && val.length != 0) { 

      //add one to the counter 
      controlsPassed += 1; 
     } 

     }); 
return (controlsPassed == 3) 

    case 'Milestone Action': 

     var controlsPassed = 0; 


    $("input[title=Target Date],select[id$=SelectResult],input[title=Title],input[id$=UserField_hiddenSpanData],input[title=Start Date],select[title=Strategic 

Objective],select[title=Strategic Priority]").each(function(){ 


     var val = $(this).val(); 
     if(val != 0 && val.length != 0) { 

      //add one to the counter 
      controlsPassed += 1; 
     } 

     }); 
return (controlsPassed == 7) 

case 'Performance Measure': 

     var controlsPassed = 0; 


    $("select[title=Strategic Objective],input[title=Title],select[id$=SelectResult],select[title=Strategic Priority]").each(function(){ 

     var val = $(this).val(); 
     if(val != 0 && val.length != 0) { 

      //add one to the counter 
      controlsPassed += 1; 
     } 

     }); 
return (controlsPassed == 4) 


    case 'Strategic Priority': 

     var controlsPassed = 0; 


    $("input[title=Target Date],select[id$=SelectResult],input[title=Title],input[id$=UserField_hiddenSpanData],input[title=Start Date],select[title=Strategic 

Objective]").each(function(){ 

     //var ResponsibleBusiness = $("select[id$=SelectResult]").val(); 
     var val = $(this).val(); 
     if(val != 0 && val.length != 0) { 

      //add one to the counter 
      controlsPassed += 1; 
     } 

     }); 
return (controlsPassed == 6) 
    } 
} 

function PreSaveItem() { 
      return checkControls() 
    } 
+0

當有些東西不存在,它是'undefined',而不是'null'。唯一的例外是,如果某個具有所提供的ID的節點不存在,則'document.getElementById'返回'null'。 – 2010-08-20 01:08:56

回答

0

如果我正確理解你的目標,你可以縮短它歸結爲這樣:

if(!$("select[id$=SelectResult]").val()) return false; 
return $("input[title=Target Date],input[title=Title],input[id$=UserField_hiddenSpanData],input[title=Start Date],select[title=Strategic Objective]").filter(function(){ 
     return $(this).val() == ''; 
     }).length > 0; 
+0

嗨,我剛剛更新了一下我的問題。 – Peter 2010-08-20 01:19:24

+0

@Peter - 你準確得到什麼錯誤? – 2010-08-20 01:19:46

+0

如果用戶在列表中沒有任何內容(id $ = SelectResult)時單擊提交按鈕,則''length'爲null或不是對象。如果用戶將一個項目添加到列表中,他們可以點擊提交。如果列表中沒有項目,我不希望他們能夠提交,所以它可以工作,我只是想擺脫錯誤。 – Peter 2010-08-20 01:22:15

0

改變這一行:

if(val != 0 && val.length != 0) { 

if (!!val && val.length > 0) { 
相關問題