2010-08-20 459 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) {