dynamic-totals.html 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <title>jQuery validation plug-in - dynamic forms demo</title>
  6. <link rel="stylesheet" media="screen" href="css/screen.css">
  7. <script src="../lib/jquery.js"></script>
  8. <script src="../dist/jquery.validate.js"></script>
  9. <script>
  10. // only for demo purposes
  11. $.validator.setDefaults({
  12. submitHandler: function() {
  13. alert("submitted!");
  14. }
  15. });
  16. $.validator.messages.max = jQuery.validator.format("Your totals mustn't exceed {0}!");
  17. $.validator.addMethod("quantity", function(value, element) {
  18. return !this.optional(element) && !this.optional($(element).parent().prev().children("select")[0]);
  19. }, "Please select both the item and its amount.");
  20. $().ready(function() {
  21. $("#orderform").validate({
  22. errorPlacement: function(error, element) {
  23. error.appendTo(element.parent().next());
  24. },
  25. highlight: function(element, errorClass) {
  26. $(element).addClass(errorClass).parent().prev().children("select").addClass(errorClass);
  27. }
  28. });
  29. var template = jQuery.validator.format($.trim($("#template").val()));
  30. function addRow() {
  31. $(template(i++)).appendTo("#orderitems tbody");
  32. }
  33. var i = 1;
  34. // start with one row
  35. addRow();
  36. // add more rows on click
  37. $("#add").click(addRow);
  38. // check keyup on quantity inputs to update totals field
  39. $("#orderform").on("keyup", "input.quantity", function(event) {
  40. var totals = 0;
  41. $("#orderitems input.quantity").each(function() {
  42. totals += +this.value;
  43. });
  44. $("#totals").attr("value", totals).valid();
  45. });
  46. });
  47. </script>
  48. <style>
  49. form.cmxform {
  50. width: 50em;
  51. }
  52. em.error {
  53. background:url("images/unchecked.gif") no-repeat 0px 0px;
  54. padding-left: 16px;
  55. }
  56. em.success {
  57. background:url("images/checked.gif") no-repeat 0px 0px;
  58. padding-left: 16px;
  59. }
  60. form.cmxform label.error {
  61. margin-left: auto;
  62. width: 250px;
  63. }
  64. form.cmxform input.submit {
  65. margin-left: 0;
  66. }
  67. em.error {
  68. color: black;
  69. }
  70. #warning {
  71. display: none;
  72. }
  73. select.error {
  74. border: 1px dotted red;
  75. }
  76. </style>
  77. </head>
  78. <body>
  79. <h1 id="banner"><a href="https://jqueryvalidation.org/">jQuery Validation Plugin</a> Demo</h1>
  80. <div id="main">
  81. <textarea style="display:none" id="template">
  82. <tr>
  83. <td>
  84. <label>{0}. Item</label>
  85. </td>
  86. <td class='type'>
  87. <select name="item-type-{0}">
  88. <option value="">Select...</option>
  89. <option value="0">Learning jQuery</option>
  90. <option value="1">jQuery Reference Guide</option>
  91. <option value="2">jQuery Cookbook</option>
  92. <option vlaue="3">jQuery In Action</option>
  93. <option value="4">jQuery For Designers</option>
  94. </select>
  95. </td>
  96. <td class='quantity'>
  97. <input size='4' class="quantity" min="1" id="item-quantity-{0}" name="item-quantity-{0}">
  98. </td>
  99. <td class='quantity-error'></td>
  100. </tr>
  101. </textarea>
  102. <form id="orderform" class="cmxform" method="get" action="foo.html">
  103. <h2 id="summary"></h2>
  104. <fieldset>
  105. <legend>Example with custom methods and heavily customized error display</legend>
  106. <table id="orderitems">
  107. <tbody>
  108. </tbody>
  109. <tfoot>
  110. <tr>
  111. <td colspan="2">
  112. <label>Totals (max 25)</label>
  113. </td>
  114. <td class="totals">
  115. <input id="totals" name="totals" value="0" max="25" readonly="readonly" size='4'>
  116. </td>
  117. <td class="totals-error"></td>
  118. </tr>
  119. <tr>
  120. <td colspan="2">&nbsp;</td>
  121. <td>
  122. <input class="submit" type="submit" value="Submit">
  123. </td>
  124. </tr>
  125. </tfoot>
  126. </table>
  127. </fieldset>
  128. </form>
  129. <button id="add">Add another input to the form</button>
  130. <h1 id="warning">Your form contains tons of errors! Please try again.</h1>
  131. <p><a href="index.html">Back to main page</a>
  132. </p>
  133. </div>
  134. </body>
  135. </html>