这是我使用的标记:
@H_502_2@<input type="text" form="myform" name="inp1" />
<form id="myform" name="myform">
...
</form>
现在我意识到它不适用于旧IE,因此我正在搜索HTML 5 polyfill.
任何人都知道某个覆盖HTML5功能的polyfill?
解决方法
我写这个polyfill来模拟这样的功能,通过在表单提交时复制字段,在IE6中测试,它工作正常.
@H_502_2@(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 || sampleElement instanceof window.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) {
$('<input/>')
.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) {
// serialize data
var data = $('[form='+ this.id + ']').serializeArray();
// append data to form
$(this).appendField(data);
}).each(function() {
var form = this,$fields = $('[form=' + this.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);