2015-11-28 37 views
1

我一直在嘗試使用觸發我的輸入元素的click事件的角度在其他元素NG點擊,這樣的:angular.element觸發單擊事件不起作用

HTML

<div class="myClass" ng-click="vm.selectImage()" nv-file-drop uploader="vm.uploadImage"> 
    Drop your image here 
</div> 
<div ng-hide="!hideInput"> 
    <input type="file" id="imgSelect" nv-file-selec uploader="vm.uploadImage" /> 
</div> 

控制器

vm.selectImage= selectImage; 
function selectImage() { 
    angular.element('#imgSelect').trigger('click'); 
}; 

我知道有這個其他類似的問題,但我已經嘗試過使用WHA牛逼他們說(這一羣人顯示我使用相同的代碼),例如:

但即便如此,甚至使用這樣的指令:

.directive('selectImg', selectImg); 
function selectImg() { 
    return { 
     restrict: 'A', 
     link: function(scope, element) { 
      element.bind('click', function(e) { 
       //option 1 
       angular.element(e.target).siblings('.imgSelect').trigger('click'); 

       //option 2 
       angular.element(document.querySelector('#imgSelect')).trigger('click'); 

       //option 3 
       var myEl = angular.element(document.querySelector('#imgSelect')); 
       myEl.trigger('click'); 

       //option 4 
       angular.element('#imgSelect').trigger('click'); //angular way 
      }); 
     } 
    }; 
}; 

我不斷收到此錯誤:

Error: [jqLite:nosel] http://errors.angularjs.org/1.5.0-beta.1/jqLite/nosel

這裏是展示錯誤plunker:http://plnkr.co/edit/rWcCbixwFArYhCxUVTsv?p=preview

問題是什麼?

+0

請創建演示該問題 –

+0

@GaneshKumar我已經更新了我一個plunker問題上plunkr。 – celsomtrindade

+0

問題是,你沒有這樣做的角度的方式,所以毫不奇怪它不起作用。你的所有版本都不可靠,因爲它們試圖處理不在指令上下文中的DOM,所以當你嘗試使用它時,模板可能不在DOM中。 – dfsq

回答

4

確定更新我的回答這個works.It出現,你必須打破目前的$的適用()循環。這樣做的一種方法是使用$超時()

setTimeout(function() { 
    document.getElementById('imgSelect').click()   
}, 0); 

檢查答案Trigger input file click event in AngularJS

+0

控制檯中沒有更多的錯誤。但不應該打開添加文件的輸入嗎? – celsomtrindade

+0

@CelsomTrindade更新了我的答案 –

+0

謝謝sr!現在它工作正常。 – celsomtrindade