如何在JavaScript中重新排序上载文件
我正在使用AngularJS和如何在JavaScript中重新排序上载文件,javascript,jquery,html,angularjs,angular-ui-sortable,Javascript,Jquery,Html,Angularjs,Angular Ui Sortable,我正在使用AngularJS和ui sortable对通过HTML上传的图像进行重新排序,使用以下输入: <input name="userfile[]" type="file" id="userfile" ng-if="charSelected" onchange="angular.element(this).scope().filesLoaded(this.files)" multiple> 但是document.getElementById返回的对象似乎是不可变的,因为con
ui sortable
对通过HTML上传的图像进行重新排序,使用以下输入:
<input name="userfile[]" type="file" id="userfile" ng-if="charSelected" onchange="angular.element(this).scope().filesLoaded(this.files)" multiple>
但是document.getElementById返回的对象似乎是不可变的,因为console.log即使在我将文件[originalPos]与文件[newPos]交换之后也会返回相同的名称
如何更改用户要上载的文件的顺序?出于安全原因,无法设置文件属性。我懂了。所以我可能需要做一些事情,比如创建一个索引数组来传递POST数据,这样服务器端就可以处理它了?好吧,从javascript访问文件数组(我相信)只会返回文件名的字符串。我不认为它会把文件还给你。你最好的办法是按原样发送,然后在服务器端执行必要的排序/洗牌编辑:误读你的评论。是的,这就是解决办法
<table>
<tr><span ng-if="charSelected && type == 'Image'">Preview (Drag to Reorder)</span></tr>
<tr ng-model="images" ui-sortable="reorderFiles">
<td ng-repeat="image in images track by $index" ng-if="charSelected && type == 'Image'"><img ng-src="{{image}}" /></td>
</tr>
</table>
// Sortable change event
$scope.reorderFiles = {
update: function(e, ui) {
var originalPos = ui.item.index();
var newPos = ui.item.sortable.dropindex;
// Swap the files
var t1 = document.getElementById('userfile').files[originalPos];
console.log("orig: " + document.getElementById('userfile').files[originalPos].name);
document.getElementById('userfile').files[originalPos] = document.getElementById('userfile').files[newPos];
document.getElementById('userfile').files[newPos] = t1;
console.log("new: " + document.getElementById('userfile').files[originalPos].name);
}
}