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

在HTML5中,有form属性。 基本上

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

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

 document.getElementById("myForm").submit(); $("#myForm").submit(); 

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

IE尚不支持元素的HTML5 form属性。

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

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

 (function($) { /** * polyfill for html5 form attr */ // detect if browser supports this var sampleElement = $('[form]').get(0); var isIE11 = !(window.ActiveXObject) && "ActiveXObject" in window; if (sampleElement && window.HTMLFormElement && sampleElement.form instanceof HTMLFormElement && !isIE11) { // browser supports it, no need to fix return; } /** * Append a field to a form * */ $.fn.appendField = function(data) { // for form only if (!this.is('form')) return; // wrap data if (!$.isArray(data) && data.name && data.value) { data = [data]; } var $form = this; // attach new params $.each(data, function(i, item) { $('') .attr('type', 'hidden') .attr('name', item.name) .val(item.value).appendTo($form); }); return $form; }; /** * Find all input fields with form attribute point to jQuery object * */ $('form[id]').submit(function(e) { var $form = $(this); // serialize data var data = $('[form='+ $form.attr('id') + ']').serializeArray(); // append data to form $form.appendField(data); }).each(function() { var form = this, $form = $(form), $fields = $('[form=' + $form.attr('id') + ']'); $fields.filter('button, input').filter('[type=reset],[type=submit]').click(function() { var type = this.type.toLowerCase(); if (type === 'reset') { // reset form form.reset(); // for elements outside form $fields.each(function() { this.value = this.defaultValue; this.checked = this.defaultChecked; }).filter('select').each(function() { $(this).find('option').each(function() { this.selected = this.defaultSelected; }); }); } else if (type.match(/^submit|image$/i)) { $(form).appendField({name: this.name, value: this.value}).submit(); } }); }); })(jQuery); 

现场版: http : //jsfiddle.net/hbxk4e61/

顺便说一句,您可以查看此页面以测试您的浏览器当前支持的HTML5function的数量。 例如,我使用的是Chrome 31,它确实支持此属性。

Chrome目前支持该功能

好吧,IE基本上不支持输入中的表单属性,但您可以使用javascript来提交表单:

 document.getElementById("myForm").submit(); 

或者jQuery

 $("#myForm").submit(); 

据我所知,Internet Explorer不支持(至少IE10)支持form属性。

您可以在javascript中填充此内容,也可以将input移动到相关表单中。 这已经在其他地方得到了解答: https : //stackoverflow.com/a/16694990/13019

 

由于所有项目都包含了jquery 100%:)你可以在外部或任何包含的js文件中定义文档就绪函数来捕获提交按钮点击外包forms通过捕获所有表单id从表单开始 – 所以它捕获不同页面上的表单不同的名称,所以你不必重复相同的jquery代码snipet

从@VoldemarasBirškys的回答中,我已经改进了他的脚本作为polyfill工作,所以你仍然可以使用form属性而不是你的按钮,它就像EDGE / IE会尊重form属性一样。

 

主要区别在于现在我们在外部submit按钮上包含form 。 此外,在click处理程序中,我只使用事件来获取target元素,并从id中发现目标表单的id

🙂