ng-select按钮打开文件系统对话两次

时间:2016-09-14 18:57:07

标签: angularjs ng-file-upload

所以我正在追踪一个我无法解决的错误。问题是,如果你有一个带有ng-select的按钮,取消浏览器的焦点(点击桌面),然后双击按钮,它会打开浏览器文件系统对话框两次,丢掉第一个输入。问题是如何强制它只打开文件对话一次。

相关代码:

<!-- Table Buttons -->
<div class="container dashboard__table__action-items-container" ng-if="user.Welcomed">
    <button class="btn btn-primary" ngf-select="onFileSelect($files)" ngf-multiple="true" style="margin-right: 15px;">
        <i class="fa fa-cloud-upload fa-3" style="margin-right: 4px"></i> Upload Meeting
    </button>

...     

</div>

编辑: 我用几个浏览器测试了这个行为并且它没有发生(firefox,safari,opera)。这只发生在chrome上。 ng-file-upload的版本是12.2.9,chrome版本52.0.2743.116。

1 个答案:

答案 0 :(得分:1)

所以我结束了#34;解决&#34;这是通过黑客攻击它,但我仍然认为它是chrome和/或ng-file-select的错误。对于后代,如果您将按钮包含在具有ngf-select的div中,则可以手动去抖动事件传播。

相关代码:

HTML:

<div ngf-select="onFileSelect($files)" ngf-multiple="true" style="width: 0;">
    <button class="btn btn-primary" ng-click="debounceMeetingCreation($event)" style="margin-right: 15px;">
        <i class="fa fa-cloud-upload fa-3" style="margin-right: 4px"></i> Upload Meeting
    </button>
</div>

在控制器中:

var meetingCreationClicked;
$scope.debounceMeetingCreation = function ($event) {
    if (meetingCreationClicked) {
        $event.preventDefault();
        $event.stopPropagation();
        return false;
    }

    meetingCreationClicked = true;

    $timeout(function(){
        meetingCreationClicked = false;
    }, 1000);
};