2015-02-27 19 views
12

Tôi đang cố gắng mô phỏng sự kiện nhấp chuột trên đầu vào tệp trong AngularJS. Tôi đã thấy working jQuery examples, nhưng tôi không muốn sử dụng jQuery.Kích hoạt sự kiện nhấp vào tệp đầu vào trong AngularJS

'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); 
 
    }; 
 
});
<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>

Lưu ý: Đối với một số lý do nút cần được nhấn hai lần để kích hoạt các chức năng thời gian chờ.

Tôi đang sử dụng setTimeoutthis post.

Làm cách nào để nhấp vào một đầu vào tệp theo cách lập trình chỉ với JavaScript AngularJS/vanilla?

+1

Mã trong câu hỏi cũng như câu trả lời được đề xuất là một mẫu chống nổi tiếng trong Angular.js - không thực hiện thao tác DOM trong bộ điều khiển của bạn, trừ khi nó nằm trong bộ điều khiển chỉ thị. – yangmillstheory

Trả lời

31

Bạn chỉ có thể sử dụng

<button type="button" onclick="document.getElementById('input').click()">Click me!</button> 

HOẶC

$scope.click = function() { 
    setTimeout(function() { 
     document.getElementById('input').click() 
     $scope.clicked = true; 
    }, 0); 
}; 
+0

Điều đó có hiệu quả. Cảm ơn! –

+2

Xin chào, đôi khi nó được mở nhiều lần, bất kỳ cách nào để ngăn chặn điều đó? –

+4

Tôi chắc chắn @LiadLivnat đã giải quyết được sự cố của anh ấy, nhưng chỉ trong trường hợp bất kỳ ai tình cờ gặp phải vấn đề này và có cùng một vấn đề; Điều này xảy ra khi bạn đặt '' bên trong phần tử được cho là kích hoạt nhấp chuột vào đầu vào. '

' sẽ kích hoạt nhấp chuột vô hạn trên phần tử đó. '
' hoạt động tốt :) –

0

Dưới đây là làm thế nào để tập tin kích hoạt của loại 'file' hoặc mở cửa sổ chọn file khi nhấp chuột vào biểu tượng, nút hoặc span như bạn muốn;)

css:

.attachImageForCommentsIcon{ 
    padding-top: 14px; 
    padding-right: 6px; 
    outline:none; 
    cursor:pointer; 
} 

HTML:

<input id="myInput" type="file" style="visibility:hidden" ng-file-model=""/> 
<i onclick="$('#myInput').click();" class="attachImageForCommentsIcon blue-2 right-position material-icons">image</i> 

tất cả các khoản tín dụng đi cho câu trả lời này: https://stackoverflow.com/questions/8595389/programmatically-trigger-select-file-dialog-box

Do đó, chúng tôi tùy chỉnh thẻ đầu vào tập tin sử dụng theo cách này.

Các vấn đề liên quan