在AngularJS中触发输入文件单击事件

Rem*_*ing 16 html javascript angularjs

我试图模仿AngularJS中的文件输入上的单击事件.我见过工作jQuery示例,但我不想使用jQuery.

'use strict';

angular.module('MyApp', []).

controller('MyCtrl', function($scope) {
  $scope.click = function() {
    setTimeout(function() {
      var element = angular.element(document.getElementById('input'));
      element.triggerHandler('click');
      $scope.clicked = true;
    }, 0);
  };
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://code.angularjs.org/1.3.14/angular.js"></script>
<div ng-app="MyApp" ng-controller="MyCtrl">
  <input id="input" type="file"/>
  <button ng-click="click()">Click me!</button>
  <div ng-if="clicked">Clicked</div>
</div>
Run Code Online (Sandbox Code Playgroud)

注意:由于某种原因,需要按两次按钮才能触发超时功能.

我正在使用setTimeout因为这篇文章.

如何使用AngularJS/vanilla JavaScript以编程方式单击文件输入?

Sat*_*pal 40

你可以简单地使用

 <button type="button" onclick="document.getElementById('input').click()">Click me!</button>
Run Code Online (Sandbox Code Playgroud)

要么

$scope.click = function() {
    setTimeout(function() {
        document.getElementById('input').click()
        $scope.clicked = true;
    }, 0);
};
Run Code Online (Sandbox Code Playgroud)

  • 我确信@LiadLivnat已经解决了他的问题,但万一有人偶然发现了这个并且有同样的问题; 当你将`<input>`放在应该触发输入点击的元素内时会发生这种情况.`<div onClick ="document.getElementById('input').click()"> <input /> </ div>`将触发该元素的无限点击.`<input /> <div onClick ="document.getElementById('input').click()"> </ div>`工作正常:) (5认同)
  • 嗨,有时会多次打开,有什么方法可以防止这种情况发生? (2认同)