jquery – 用于按钮元素的HTML5表单属性的Internet Explorer问题

前端之家收集整理的这篇文章主要介绍了jquery – 用于按钮元素的HTML5表单属性的Internet Explorer问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在HTML5中,有form属性.基本上
  1. <form id="myform" method="get" action="something.jsp">
  2. <input type="text" name="name" />
  3. </form>
  4. <input type="submit" form="myform" />

上面的代码在IE中不起作用.
任何人都可以帮我解决这个问题.

我使用了以下javascript和jQuery来提交表单,但我遇到了Ajax问题.
我的页面正在重新加载.

  1. document.getElementById("myForm").submit();
  2.  
  3. $("#myForm").submit();

如何在我的页面不应加载的地方提交表单.
我正在使用Anguler JS Ajax.

解决方法

IE不支持< input>的HTML5表单属性或者< button>元素呢.

如果要将外部输入元素与表单相关联,可以将“阴影”复制为表单内的不可见输入字段,并将事件处理程序附加到表单的onsubmit事件.当用户提交表单时,更新其中的值.

以下polyfill(需要jQuery)模拟该功能.它使具有表单属性的输入元素表现得像它们在表单中:

  1. (function($) {
  2. /**
  3. * polyfill for html5 form attr
  4. */
  5.  
  6. // detect if browser supports this
  7. var sampleElement = $('[form]').get(0);
  8. var isIE11 = !(window.ActiveXObject) && "ActiveXObject" in window;
  9. if (sampleElement && window.HTMLFormElement && sampleElement.form instanceof HTMLFormElement && !isIE11) {
  10. // browser supports it,no need to fix
  11. return;
  12. }
  13.  
  14. /**
  15. * Append a field to a form
  16. *
  17. */
  18. $.fn.appendField = function(data) {
  19. // for form only
  20. if (!this.is('form')) return;
  21.  
  22. // wrap data
  23. if (!$.isArray(data) && data.name && data.value) {
  24. data = [data];
  25. }
  26.  
  27. var $form = this;
  28.  
  29. // attach new params
  30. $.each(data,function(i,item) {
  31. $('<input/>')
  32. .attr('type','hidden')
  33. .attr('name',item.name)
  34. .val(item.value).appendTo($form);
  35. });
  36.  
  37. return $form;
  38. };
  39.  
  40. /**
  41. * Find all input fields with form attribute point to jQuery object
  42. *
  43. */
  44. $('form[id]').submit(function(e) {
  45. var $form = $(this);
  46. // serialize data
  47. var data = $('[form='+ $form.attr('id') + ']').serializeArray();
  48. // append data to form
  49. $form.appendField(data);
  50. }).each(function() {
  51. var form = this,$form = $(form),$fields = $('[form=' + $form.attr('id') + ']');
  52.  
  53. $fields.filter('button,input').filter('[type=reset],[type=submit]').click(function() {
  54. var type = this.type.toLowerCase();
  55. if (type === 'reset') {
  56. // reset form
  57. form.reset();
  58. // for elements outside form
  59. $fields.each(function() {
  60. this.value = this.defaultValue;
  61. this.checked = this.defaultChecked;
  62. }).filter('select').each(function() {
  63. $(this).find('option').each(function() {
  64. this.selected = this.defaultSelected;
  65. });
  66. });
  67. } else if (type.match(/^submit|image$/i)) {
  68. $(form).appendField({name: this.name,value: this.value}).submit();
  69. }
  70. });
  71. });
  72.  
  73.  
  74. })(jQuery);

实时版:http://jsfiddle.net/hbxk4e61/

顺便说一句,您可以查看this page以测试您的浏览器当前支持的HTML5功能数量.例如,我使用的是Chrome 31,它确实支持属性.

猜你在找的jQuery相关文章