2012-06-04 23 views
3

我想基於函數參數中的定義構建幾個動態if語句。如果提供了特定的鍵和值,我應該能夠運行它們。我可以讀取所有的鍵和值,但不知道如何在其上構建代碼。 這是作爲一個函數參數傳遞的對象:jQuery - 基於作爲函數參數傳遞的基於對象的動態if語句構建

param = { 
    'fields': {  
     'email' : { 
      'match' : 'email' 
     }, 
     'countAdults': { 
      'match' : 'number', 
      'range' : '1, 10' 
     } 
    } 
}; 

//而該位被試圖解析對象

$.each(param.fields, function(key, value){ // reading definitions from the parameter 
    if(name == "'+key+'") $('[name="'+key+'"]').mandatory(); // define the begining of if 
    $.each(param.fields[key], function(subk, subv){       
     += '.'+subk+'("'+subv+'")'; // adding more to the if statement 
    });  
}); 
return (all if statement); 
} 

返回所有這些之後,如果語句我也想運行else語句默認情況下。我試圖將這些代碼從主函數的主體移動到您調用該函數的位置,這樣我就不必每次都自定義函數的主體。

+0

爲什麼不創建遞歸函數?如果您的語句讓孩子再次調用該函數,則可能更簡單。 –

回答

0

我建議你改爲添加一個類,用於每個你想要的驗證。像這樣:

<!doctype html> 
<html> 
    <head> 
    <style type="text/css"> 
     input.invalid { border: 1px solid red; } 
    </style> 
    <script 
     src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"> 
    </script> 

    <script> 
     $(function() 
     { 
     $('.email').each(function() 
     { 
      var input = $(this); 

      input.keyup(function() 
      { 
      validate_as_email(input); 
      }); 
     }); 
     }); 

     function validate_as_email(input) 
     { 
     var value = input.val(); 

     if (is_email(value)) 
      input.removeClass('invalid'); 
     else 
      input.addClass('invalid'); 
     } 

     function is_email(value) 
     { 
     return value.match 
      (/^[A-Z0-9._%-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}$/i) != null; 
     } 
    </script> 
    </head> 
    <body> 
    Email:<br> 
    <input type="text" id="email" class="email"> 
    </body> 
</html>