使用javascript清除/重置formData()

Mar*_*ane 4 html javascript jquery html5

我在下面使用formData,并传递结果。但是,如果用户不止一次重复数据,则会被复制。因此,我必须在添加任何值之前清除/重置formData。

我可以像f.name =''一样一对一地做,我有很多钥匙。有没有更好的方法来解决问题?

$('input').change(function(){
// Create a new formdata but at first have to clear/reset it
var fd = new FormData();
var f = $.canvasResize('dataURLtoBlob', data);
f.name = file.name;
fd.append($('#area input').attr('name'), f);
})
Run Code Online (Sandbox Code Playgroud)

Kai*_*ido 5

@ gurvinder372的答案不会从FormData中删除您的密钥,它只会将其设置为空字符串,这与服务器端不同。
例如,在php中,if ( isset($_POST["yourKey"]) )仍将评估为true。


不幸的是,最好的跨浏览器方式是根据您的情况创建一个新的FormData对象。

fd = new FormData();
Run Code Online (Sandbox Code Playgroud)

尽管目前仅Chrome> = 50Firefox> = 39支持,另一种可能性是使用该formData.set()方法。
这将替换set键上的值,如果没有该键,则将其附加。

formData.set('yourKey', yourValue);
Run Code Online (Sandbox Code Playgroud)

现在在Chrome> = 50Firefox> = 44中回答问题的标题,您可以使用FormData对象的for .. of formData.keys()delete方法:

var formData = new FormData();
formData.append('yourKey', yourValue);

for (var key of formData.keys()) {
    // here you can add filtering conditions
    formData.delete(key)
    });
Run Code Online (Sandbox Code Playgroud)

甚至使用其forEach方法(显然具有相同的不良浏览器支持)

var formData = new FormData();
formData.append('yourKey', yourValue);

formData.forEach(function(val, key, fD){
    // here you can add filtering conditions
    formData.delete(key)
    });
Run Code Online (Sandbox Code Playgroud)


gur*_*372 4

或者您可以通过执行以下操作来清除FormData

function clearFormData( fd )
{
  for( var prop in fd )
  {
    if ( typeof fd[ prop ] != "function" )
    {
      fd[ prop ] = "";
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用输入删除方法

var entries = formData.entries();
for(var pair of entries ) 
{
   formData.delete( pair[0] );
}
Run Code Online (Sandbox Code Playgroud)