【发布时间】:2016-02-28 12:06:10
【问题描述】:
我想使用 angularjs 实现一个场景,其中用户选择一个目录,选择后需要对该目录中的每个文件进行一些处理。
请在下面找到相同的代码 HTML 文件:
<div ng-app="myApp" ng-controller="myCtrl">
<input id="folder" type="file" onchange="angular.element(this).scope().checkFiles(this.files)" webkitdirectory="" directory="" multiple="" />
</div>
Javascript 代码
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
$scope.checkFiles = function(files) {
console.log(files);
//add below line of code to trigger onchange event if user select same directory
angular.element(document.querySelector('#folder'))[0].value = null;
};
});
Plunker 链接https://plnkr.co/edit/lDhoShIVgCXLd33mPtbh?p=preview
当所选目录中有一些文件时,编写的代码工作。但是当我选择空目录时,它会触发 onchange 事件。
我尝试了很多,但没有找到导致这种行为的根本原因。
我注意到的一件事是,当我删除下面的代码行时
//add below line of code to trigger onchange event if user select same directory
angular.element(document.querySelector('#folder'))[0].value = null;
并选择一个包含一些文件的目录,然后选择一个空的目录 onchange 事件被触发。但是如果我第一次尝试直接选择空目录,则不会触发 onchange 事件。
需要知道为什么没有为空目录触发 onchange 事件。
注意:请在其他浏览器不支持的 chrome 浏览器上尝试此代码
【问题讨论】:
-
Angular 与否,您无法选择目录。但是您可以选择一个或多个文件,然后文件输入将触发更改事件。
-
@IgweKalu 我想选择目录,我可以做到,请检查 plunker 链接plnkr.co/edit/lDhoShIVgCXLd33mPtbh?p=preview 只是想知道为什么 onchange 事件在选择空目录时被触发。
-
每次我选择一个目录并单击选择,它只是简单地打开目录以显示其内容。之后只启用取消选项,除非您选择一个文件或目录(在这种情况下,它只会再次打开该目录)。我不知道你是怎么做到的。我希望我能帮助你...
-
此外,请注意除非确实发生了更改,否则不会触发更改事件。例如,如果您之前选择了文件 a.text,然后再次选择它,则不会触发更改事件。当且仅当当前选择不同于之前的选择时才会触发更改。
标签: javascript angularjs onchange