Advertisement
Guest User

Untitled

a guest
Jul 24th, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.87 KB | None | 0 0
  1. <input type="text" form="myform" name="inp1" />
  2. <form id="myform" name="myform">
  3. ...
  4. </form>
  5.  
  6. (function($) {
  7. /**
  8. * polyfill for html5 form attr
  9. */
  10.  
  11. // detect if browser supports this
  12. var sampleElement = $('[form]').get(0);
  13. var isIE11 = !(window.ActiveXObject) && "ActiveXObject" in window;
  14. if (sampleElement && window.HTMLFormElement && sampleElement.form instanceof HTMLFormElement && !isIE11) {
  15. // browser supports it, no need to fix
  16. return;
  17. }
  18.  
  19. /**
  20. * Append a field to a form
  21. *
  22. */
  23. $.fn.appendField = function(data) {
  24. // for form only
  25. if (!this.is('form')) return;
  26.  
  27. // wrap data
  28. if (!$.isArray(data) && data.name && data.value) {
  29. data = [data];
  30. }
  31.  
  32. var $form = this;
  33.  
  34. // attach new params
  35. $.each(data, function(i, item) {
  36. $('<input/>')
  37. .attr('type', 'hidden')
  38. .attr('name', item.name)
  39. .val(item.value).appendTo($form);
  40. });
  41.  
  42. return $form;
  43. };
  44.  
  45. /**
  46. * Find all input fields with form attribute point to jQuery object
  47. *
  48. */
  49. $('form[id]').submit(function(e) {
  50. // serialize data
  51. var data = $('[form='+ this.id + ']').serializeArray();
  52. // append data to form
  53. $(this).appendField(data);
  54. }).each(function() {
  55. var form = this,
  56. $fields = $('[form=' + this.id + ']');
  57.  
  58. $fields.filter('button, input').filter('[type=reset],[type=submit]').click(function() {
  59. var type = this.type.toLowerCase();
  60. if (type === 'reset') {
  61. // reset form
  62. form.reset();
  63. // for elements outside form
  64. $fields.each(function() {
  65. this.value = this.defaultValue;
  66. this.checked = this.defaultChecked;
  67. }).filter('select').each(function() {
  68. $(this).find('option').each(function() {
  69. this.selected = this.defaultSelected;
  70. });
  71. });
  72. } else if (type.match(/^submit|image$/i)) {
  73. $(form).appendField({name: this.name, value: this.value}).submit();
  74. }
  75. });
  76. });
  77.  
  78.  
  79. })(jQuery);
  80.  
  81. (function($) {
  82. /**
  83. * polyfill for html5 form attr
  84. */
  85.  
  86. // detect if browser supports this
  87. var SAMPLE_FORM_NAME = "html-5-polyfill-test";
  88. var sampleForm = $("<form id='" + SAMPLE_FORM_NAME + "'/>");
  89. var sampleFormAndHiddenInput = sampleForm.add($("<input type='hidden' form='" + SAMPLE_FORM_NAME + "'/>"));
  90. sampleFormAndHiddenInput.prependTo('body');
  91. var sampleElementFound = sampleForm[0].elements[0];
  92. sampleFormAndHiddenInput.remove();
  93. if (sampleElementFound) {
  94. // browser supports it, no need to fix
  95. return;
  96. }
  97.  
  98. /**
  99. * Append a field to a form
  100. *
  101. */
  102. $.fn.appendField = function(data) {
  103. // for form only
  104. if (!this.is('form')) return;
  105.  
  106. // wrap data
  107. if (!$.isArray(data) && data.name && data.value) {
  108. data = [data];
  109. }
  110.  
  111. var $form = this;
  112.  
  113. // attach new params
  114. $.each(data, function(i, item) {
  115. $('<input/>')
  116. .attr('type', 'hidden')
  117. .attr('name', item.name)
  118. .val(item.value).appendTo($form);
  119. });
  120.  
  121. return $form;
  122. };
  123.  
  124. /**
  125. * Find all input fields with form attribute point to jQuery object
  126. *
  127. */
  128. $('form[id]').submit(function(e) {
  129. // serialize data
  130. var data = $('[form='+ this.id + ']').serializeArray();
  131. // append data to form
  132. $(this).appendField(data);
  133. }).each(function() {
  134. var form = this,
  135. $fields = $('[form=' + this.id + ']');
  136.  
  137. $fields.filter('button, input').filter('[type=reset],[type=submit]').click(function() {
  138. var type = this.type.toLowerCase();
  139. if (type === 'reset') {
  140. // reset form
  141. form.reset();
  142. // for elements outside form
  143. $fields.each(function() {
  144. this.value = this.defaultValue;
  145. this.checked = this.defaultChecked;
  146. }).filter('select').each(function() {
  147. $(this).find('option').each(function() {
  148. this.selected = this.defaultSelected;
  149. });
  150. });
  151. } else if (type.match(/^submit|image$/i)) {
  152. $(form).appendField({name: this.name, value: this.value}).submit();
  153. }
  154. });
  155. });
  156.  
  157.  
  158. })(jQuery);
  159.  
  160. var isEdge = navigator.userAgent.indexOf("Edge");
  161. if (sampleElement && window.HTMLFormElement && sampleElement.form instanceof HTMLFormElement && !isIE11 && isEdge == -1) {
  162. // browser supports it, no need to fix
  163. return;
  164. }
  165.  
  166. (function($) {
  167. /**
  168. * polyfill for html5 form attr
  169. */
  170.  
  171. // detect if browser supports this
  172. var SAMPLE_FORM_NAME = "html-5-polyfill-test";
  173. var sampleForm = $("<form id='" + SAMPLE_FORM_NAME + "'/>");
  174. var sampleFormAndHiddenInput = sampleForm.add($("<input type='hidden' form='" + SAMPLE_FORM_NAME + "'/>"));
  175. sampleFormAndHiddenInput.prependTo('body');
  176. var sampleElementFound = sampleForm[0].elements[0];
  177. sampleFormAndHiddenInput.remove();
  178. if (sampleElementFound) {
  179. // browser supports it, no need to fix
  180. return;
  181. }
  182.  
  183. /**
  184. * Append a field to a form
  185. *
  186. */
  187. var CLASS_NAME_POLYFILL_MARKER = "html-5-polyfill-form-attr-marker";
  188. $.fn.appendField = function(data) {
  189. // for form only
  190. if (!this.is('form')) return;
  191.  
  192. // wrap data
  193. if (!$.isArray(data) && data.name && data.value) {
  194. data = [data];
  195. }
  196.  
  197. var $form = this;
  198.  
  199. // attach new params
  200. $.each(data, function(i, item) {
  201. $('<input/>')
  202. .attr('type', 'hidden')
  203. .attr('name', item.name)
  204. .attr('class', CLASS_NAME_POLYFILL_MARKER)
  205. .val(item.value).appendTo($form);
  206. });
  207.  
  208. return $form;
  209. };
  210.  
  211. /**
  212. * Find all input fields with form attribute point to jQuery object
  213. *
  214. */
  215. $('form[id]').submit(function(e, origSubmit) {
  216. // clean up form from last submit
  217. $('.'+CLASS_NAME_POLYFILL_MARKER, this).remove();
  218. // serialize data
  219. var data = $('[form='+ this.id + ']').serializeArray();
  220. // add data from external submit, if needed:
  221. if (origSubmit && origSubmit.name)
  222. data.push({name: origSubmit.name, value: origSubmit.value})
  223. // append data to form
  224. $(this).appendField(data);
  225. })
  226.  
  227. //submit and reset behaviour
  228. $('button[type=reset], input[type=reset]').click(function() {
  229. //extend reset buttons to fields with matching form attribute
  230. // reset form
  231. var formId = $(this).attr("form");
  232. var formJq = $('#'+formId);
  233. if (formJq.length)
  234. formJq[0].reset();
  235. // for elements outside form
  236. if (!formId)
  237. formId = $(this).closest("form").attr("id");
  238. $fields = $('[form=' + formId + ']');
  239. $fields.each(function() {
  240. this.value = this.defaultValue;
  241. this.checked = this.defaultChecked;
  242. }).filter('select').each(function() {
  243. $(this).find('option').each(function() {
  244. this.selected = this.defaultSelected;
  245. });
  246. });
  247. });
  248. $('button[type=submit], input[type=submit], input[type=image]').click(function() {
  249. var formId = $(this).attr("form") || $(this).closest("form").attr("id");
  250. $('#'+formId).trigger('submit', this); //send clicked submit as extra parameter
  251. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement