3

関数の引数の定義に基づいて、いくつかの動的な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);
}

これらすべてのifステートメントを返した後、デフォルトの場合にelseステートメントも実行したいと思います。これらのコードをメイン関数の本体から関数を呼び出す場所に移動しようとしているので、毎回関数の本体をカスタマイズする必要はありません。

4

1 に答える 1

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._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i) != null;
      }
    </script>
  </head>
  <body>
    Email:<br>
    <input type="text" id="email" class="email">
  </body>
</html>
于 2012-07-03T19:29:23.777 に答える