0

What's the most concise way to match multiple keys to 1 value? e.g. in jQuery Validate I have something like:

$("#myform").validate({
  rules: {
    firstname: "required",
    middlename: "required",
    lastname: "required"
  },
  messages: {
    firstname: "Please fill in first name",
    middlename: "Please fill in middle name",
    lastname: "Please fill in last name"
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.11.1.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.1/jquery.validate.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.1/additional-methods.js"></script>


<form id="myform">
  <div>
    <label for="firstname">First Name</label>
    <input type="text" id="firstname" name="firstname">
  </div>
  <div>
    <label for="middlename">Middle Name</label>
    <input type="text" id="middlename" name="middlename">
  </div>
  <div>
    <label for="lastname">Last Name</label>
    <input type="text" id="lastname" name="lastname">
  </div>
  <input type="submit" value="Search">
</form>

Which is fine, but I feel repeating firstname: "required", middlename: "required", lastname: "required" is not necessary, how can I have multiple keys matching same value maybe like this?

var names = {firstname, middlename, lastname};
$("#myform").validate({
  rules: {
    names: "required"
  },
  messages: {
    firstname: "Please fill in first name",
    middlename: "Please fill in middle name",
    lastname: "Please fill in last name"
  }
});

I know I can use a for loop, but I'm looking for the most concise way.

one-hand-octopus
  • 2,229
  • 1
  • 17
  • 51

1 Answers1

0

Came up with a solution myself using $.each(), it is basically matching different keys with the same value.

var rule = "required",
    message = "Please fill in this field",
    fields = ["firstname", "middlename", "lastname"],
    rules = {},
    messages = {};

// assign "required" to each key of fields 
$.each(fields, function (index, value) {
  rules[value] = rule;
  messages[value] = message;
});

$("#myform").validate({
  rules: rules,
  messages: messages
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.1/jquery.validate.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.1/additional-methods.js"></script>

<form id="myform">
  <div>
    <label for="firstname">First Name</label>
    <input type="text" id="firstname" name="firstname">
  </div>
  <div>
    <label for="middlename">Middle Name</label>
    <input type="text" id="middlename" name="middlename">
  </div>
  <div>
    <label for="lastname">Last Name</label>
    <input type="text" id="lastname" name="lastname">
  </div>
  <input type="submit" value="Search">
</form>
one-hand-octopus
  • 2,229
  • 1
  • 17
  • 51