dynamic.html 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>BootstrapValidator demo</title>
  5. <link rel="stylesheet" href="../vendor/bootstrap/css/bootstrap.css"/>
  6. <link rel="stylesheet" href="../dist/css/bootstrapValidator.css"/>
  7. <script type="text/javascript" src="../vendor/jquery/jquery-1.10.2.min.js"></script>
  8. <script type="text/javascript" src="../vendor/bootstrap/js/bootstrap.min.js"></script>
  9. <script type="text/javascript" src="../dist/js/bootstrapValidator.js"></script>
  10. </head>
  11. <body>
  12. <div class="container">
  13. <div class="row">
  14. <!-- form: -->
  15. <section>
  16. <div class="col-lg-8 col-lg-offset-2">
  17. <div class="page-header">
  18. <h2>Dynamic fields</h2>
  19. </div>
  20. <form id="defaultForm" method="post" class="form-horizontal" action="target.php">
  21. <div class="form-group">
  22. <label class="col-lg-3 control-label">Textbox</label>
  23. <div class="col-lg-5">
  24. <input class="form-control" type="text" name="textbox[]" placeholder="Textbox #1" />
  25. </div>
  26. <div class="col-lg-4">
  27. <button type="button" class="btn btn-default btn-sm addButton" data-template="textbox">Add</button>
  28. </div>
  29. </div>
  30. <div class="form-group hide" id="textboxTemplate">
  31. <div class="col-lg-offset-3 col-lg-5">
  32. <input class="form-control" type="text" />
  33. </div>
  34. <div class="col-lg-4">
  35. <button type="button" class="btn btn-default btn-sm removeButton">Remove</button>
  36. </div>
  37. </div>
  38. <div class="form-group">
  39. <label class="col-lg-3 control-label">Checkbox</label>
  40. <div class="col-lg-5">
  41. <div class="checkbox">
  42. <label>
  43. <input type="checkbox" name="checkbox[]" value="Choice #1" /> Choice <button type="button" class="btn btn-default btn-sm addButton" data-template="checkbox">Add</button>
  44. </label>
  45. </div>
  46. <div class="checkbox hide template" id="checkboxTemplate">
  47. <label>
  48. <input type="checkbox" value="1" /> <span class="lbl">Choice</span> <button type="button" class="btn btn-default btn-sm removeButton">Remove</button>
  49. </label>
  50. </div>
  51. </div>
  52. </div>
  53. <div class="form-group">
  54. <label class="col-lg-3 control-label">Radio</label>
  55. <div class="col-lg-5">
  56. <div class="radio">
  57. <label>
  58. <input type="radio" name="radio[]" value="Choice #1" /> Choice <button type="button" class="btn btn-default btn-sm addButton" data-template="radio">Add</button>
  59. </label>
  60. </div>
  61. <div class="radio hide" id="radioTemplate">
  62. <label>
  63. <input type="radio" value="1" /> <span class="lbl">Choice</span> <button type="button" class="btn btn-default btn-sm removeButton">Remove</button>
  64. </label>
  65. </div>
  66. </div>
  67. </div>
  68. <div class="form-group">
  69. <div class="col-lg-offset-3 col-lg-3">
  70. <button type="submit" class="btn btn-primary">Submit</button>
  71. </div>
  72. </div>
  73. </form>
  74. </div>
  75. </section>
  76. <!-- :form -->
  77. </div>
  78. </div>
  79. <script type="text/javascript">
  80. $(document).ready(function() {
  81. $('.addButton').on('click', function() {
  82. var index = $(this).data('index');
  83. if (!index) {
  84. index = 1;
  85. $(this).data('index', 1);
  86. }
  87. index++;
  88. $(this).data('index', index);
  89. var template = $(this).attr('data-template'),
  90. $templateEle = $('#' + template + 'Template'),
  91. $row = $templateEle.clone().removeAttr('id').insertBefore($templateEle).removeClass('hide'),
  92. $el = $row.find('input').eq(0).attr('name', template + '[]');
  93. $('#defaultForm').bootstrapValidator('addFieldElement', $el);
  94. // Set random value for checkbox and textbox
  95. if ('checkbox' == $el.attr('type') || 'radio' == $el.attr('type')) {
  96. $el.val('Choice #' + index)
  97. .parent().find('span.lbl').html('Choice #' + index);
  98. } else {
  99. $el.attr('placeholder', 'Textbox #' + index);
  100. }
  101. $row.on('click', '.removeButton', function(e) {
  102. $('#defaultForm').bootstrapValidator('removeField', $el);
  103. $row.remove();
  104. });
  105. });
  106. $('#defaultForm')
  107. .bootstrapValidator({
  108. message: 'This value is not valid',
  109. feedbackIcons: {
  110. valid: 'glyphicon glyphicon-ok',
  111. invalid: 'glyphicon glyphicon-remove',
  112. validating: 'glyphicon glyphicon-refresh'
  113. },
  114. submitHandler: function(validator, form, submitButton) {
  115. console.log(validator.getInvalidFields());
  116. },
  117. fields: {
  118. 'textbox[]': {
  119. validators: {
  120. notEmpty: {
  121. message: 'The textbox field is required'
  122. }
  123. }
  124. },
  125. 'checkbox[]': {
  126. validators: {
  127. notEmpty: {
  128. message: 'The checkbox field is required'
  129. }
  130. }
  131. },
  132. 'radio[]': {
  133. validators: {
  134. notEmpty: {
  135. message: 'The radio field is required'
  136. }
  137. }
  138. }
  139. }
  140. })
  141. .on('error.field.bv', function(e, data) {
  142. //console.log(data.field, data.element, '-->error');
  143. })
  144. .on('success.field.bv', function(e, data) {
  145. //console.log(data.field, data.element, '-->success');
  146. })
  147. .on('added.field.bv', function(e, data) {
  148. console.log('Added element:', data.field, data.element);
  149. })
  150. .on('removed.field.bv', function(e, data) {
  151. console.log('Removed element:', data.field, data.element);
  152. });
  153. });
  154. </script>
  155. </body>
  156. </html>