如何在单击后禁用提交按钮以防止Angularjs中的多个提交?

ras*_*adb 31 html javascript angularjs

我已经浏览了整个网络,包括几个堆栈溢出示例,以解决问题.具体来说,我试过这个:

var disableButton = function() {
  document.getElementById('<%= btnSubmit.ClientID %>').disabled = true;
}

$scope.isDisabled = false;
var someFunc = function() {
  $scope.isDisabled = true;
}
Run Code Online (Sandbox Code Playgroud)
<button OnClientClick="disableButton()" type="submit">Submit</button>
<button ng-disabled="isDisabled" type="submit">Submit</button>
Run Code Online (Sandbox Code Playgroud)

两者都没有像宣传的那样工作.还有其他建议吗?请仅提供Angular建议.谢谢.

Wah*_*kar 49

你非常接近答案.你唯一错过的就是someFunc()使用按钮调用按钮ng-click.

另一个问题是,在你的控制器中,功能应该是$scope.someFunc()和不是var someFunc()

工作示例: 您的index.html应该是:

<html>

  <head>
    <script data-require="angular.js@1.3.15" data-semver="1.3.15" src="https://code.angularjs.org/1.3.15/angular.js"></script>
    <link rel="stylesheet" href="style.css" />
    <script src="script.js"></script>
    <script src="application.js"></script>
  </head>

  <body ng-app="demo" ng-controller="demoController">
          <button type="submit" ng-disabled="isDisabled" ng-click="disableButton()"> Click me to disable myself</button>
  </body>

</html>
Run Code Online (Sandbox Code Playgroud)

你的控制器application.js就像:

angular.module('demo', [])
    .controller('demoController',function($scope){

    $scope.isDisabled = false;

    $scope.disableButton = function() {
        $scope.isDisabled = true;
    }

    });
Run Code Online (Sandbox Code Playgroud)


Aru*_*osh 12

另一种方法是编写一个禁用提交按钮的指令

    angular.module('myApp').directive('clickedDisable', function(){
    return {
        restrict: 'A',
        link: function(scope, ele, attrs){
            $(ele).click(function(){
                $(ele).attr('disabled', true);
            });
        }
    };
Run Code Online (Sandbox Code Playgroud)

并在HTML中

    <button type="submit" clicked-disable></button>
Run Code Online (Sandbox Code Playgroud)


Tim*_*nen 5

我不喜欢任何提供的答案,因为它们都isDisabled变量使全局范围变得混乱,为什么不这样做呢?

<button type="submit" ng-click="disableButton($event)">Submit</button>
Run Code Online (Sandbox Code Playgroud)

.

$scope.disableButton = function($event) {
    $event.currentTarget.disabled = true;
};
Run Code Online (Sandbox Code Playgroud)

如果您需要在禁用之前提交表单.

此代码未经过测试

<form ng-submit="disableFormSubmitButton($event)">
    <button type="submit">Submit</button>
</form>
Run Code Online (Sandbox Code Playgroud)

.

$scope.disableFormSubmitButton = function($event) {
    $($event).find('[type=submit]').prop('disabled',true);
};
Run Code Online (Sandbox Code Playgroud)