我试图找出更换在jQuery的/ JavaScript的删除方法,因为我不能够使用删除方法在IE11。 IE发出错误对象不支持此属性或方法'删除'。置换删除方法在JavaScript
我试图将以下代码:
formData.delete($(this).closest('.text-center').find('.imageUrl').attr("name"));
我想,以取代由IE支持的任何其他方法删除方法。
我试图找出更换在jQuery的/ JavaScript的删除方法,因为我不能够使用删除方法在IE11。 IE发出错误对象不支持此属性或方法'删除'。置换删除方法在JavaScript
我试图将以下代码:
formData.delete($(this).closest('.text-center').find('.imageUrl').attr("name"));
我想,以取代由IE支持的任何其他方法删除方法。
如果formData
是一个JavaScript对象,那么你应该能够使用以下命令:
var name = $(this).closest('.text-center').find('.imageUrl').attr("name");
delete formData[name];
According to MDN,还有近在Internet Explorer中FormData
不支持(近仍然乐观:它仅支持append
)。使用delete ...
FUBAR拟议答案不会在这里工作,因为:
a = new FormData()
a.set('foo', 'bar')
a.get('foo') // "bar"
a['foo'] // undefined
delete a['foo'] // true
a.get('foo') // still "bar"
所以,过了一小集思广益我的第一个想法是:创建FORMDATA对象的副本,而不应该将其删除的关键(的foreach键值对)。但是:这不起作用,因为IE不支持entries以及其他可能性(Object.keys
和朋友)在我的测试中不起作用。
我会建议,或者:使用Polyfill,像这样:FormData polyfill。
或(根据您的示例,我更喜欢):毕竟您可以考虑不使用FormData。由于构造函数FormData(form)
只是使用从表单中取出的键值对填充对象(作为键的name
属性),因此可以使用像这样的普通的旧JavaScript对象来实现此行为,然后可以使用从对象中已知的任何东西(Object.keys
,delete
等)。
function formData(form) {
var result = {};
$(form).children('input').each(function (i, elem) {
result[elem.name] = elem.value;
});
return result;
}
var data = formData($('#my-form'));
console.log(JSON.stringify(data));
delete data['pet'];
console.log(JSON.stringify(data));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="my-form">
<input type="text"
value="Jon"
name="name" />
<input type="text"
value="kitty"
name="pet" />
</form>
我看到IE不支持FORMDATA不是附加其他的任何其他方法,所以删除方法是行不通的。因此,我删除了删除方法并仅通过使用append来解决问题。
谢谢你所有的回应。
'formData'变量来自哪里?类似于'formData = document.query('form')'或'formData = $('form')'? –
这里是什么'formData'? –
看起来像只有方法IE'FormData'具有'append' - 你可能必须创建一个新的'FormData'只复制你需要的条目 - 并且无法看到已经添加了什么,祝你好运 –