Подтвердить что ты не робот

Как отключить кнопку отправки после одного щелчка, чтобы предотвратить несколько представлений в Angularjs?

Я просмотрел по сети, включая несколько примеров для решения вопроса. Чтобы быть конкретным, я пробовал это:

HTML

<button OnClientClick="disableButton()" type="submit">Submit</button>

JS

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

И это:

HTML

<button ng-disabled="isDisabled" type="submit">Submit</button>

JS

    $scope.isDisabled = false;
var someFunc = function(){
$scope.isDisabled = true;}

Ни работали, ни рекламировались. Любые другие предложения? Пожалуйста, Angular только предложения. Спасибо.

4b9b3361

Ответ 1

Вы были очень близки к ответу. Единственное, что вы пропустили, это вызвать функцию someFunc() на кнопке, используя ng-click.

Другая проблема заключается в том, что в вашем контроллере функция должна быть $scope.someFunc(), а не var someFunc()

Рабочий пример: Ваш index.html должен выглядеть следующим образом:

<html>

  <head>
    <script data-require="[email protected]" 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>

И ваш контроллер application.js будет выглядеть следующим образом:

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

    $scope.isDisabled = false;

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

    });

Ответ 2

Другой способ - написать директиву, которая отключает кнопку отправки

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

И в HTML

    <button type="submit" clicked-disable></button>

Ответ 3

Попробуйте использовать это:

<input type="text" ng-model="email" ng-disabled="button" required ng-init="button=true">
<a class="btn" ng-click="button=false">enable edit</a>
<a class="btn" ng-click="button=true">disable edit</a>
<a class="btn" ng-click="button=!button">toggle edit</a>

Также существуют различные подходы к достижению этой функциональности, вы можете пройти через следующие ссылки, они наверняка помогут.

fooobar.com/questions/55992/...

fooobar.com/questions/202925/...

fooobar.com/questions/202926/...

Ответ 4

Мне не понравился ни один из предоставленных ответов, поскольку все они загромождают глобальную область видимости с переменной isDisabled, почему бы не сделать это таким образом?

<button type="submit" ng-click="disableButton($event)">Submit</button>

.

$scope.disableButton = function($event) {
    $event.currentTarget.disabled = true;
};

если вам нужно отправить форму перед отключением.

этот код не проверен

<form ng-submit="disableFormSubmitButton($event)">
    <button type="submit">Submit</button>
</form>

.

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

Ответ 5

Найдите также рабочий пример.

HTML

  <body ng-app="DisableButtonApp">
        <div ng-controller="MyAppCtrl">
            <button ng-click="someFunc()" ng-disabled="isDisabled" ng-model="isDisabled"type="submit">Submit</button>
        </div>
    </body>

JS:

angular.module('DisableButtonApp', [])
    .controller('MyAppCtrl',['$scope', function($scope){
    $scope.isDisabled = false;
    $scope.someFunc = function(){
        alert("Clicked!");
        $scope.isDisabled = true;
        return false;
    };
}]);

Демо

Ответ 6

Для чего это стоит, вы можете сделать это непосредственно в шаблоне:

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<body ng-app>

  <button ng-disabled="isDisabled" ng-click="isDisabled=true" type="submit">Submit</button> isDisabled={{isDisabled}}

</body>

Ответ 7

Вот ответ, который я получил, чтобы работать для моего сценария отправки одной формы:

$scope.increment = 0;
$scope.someFunc = function() {
     $scope.increment++
     if($scope.increment > 1) {
          return;
     } else {
          //do something else
   }
}

Не требуется никаких директив или HTMl.

Ответ 8

Из-за исторических причин одиночная (или) внутренняя подает форму, если тип не "submit".

Согласно MDN, кнопка может иметь атрибут типа.

<button type="button">Your button</button>
Кнопка

не имеет поведения по умолчанию.

Здесь более подробный ответ.

Ответ 9

Добавьте <input type="checkbox" ng-model="isDisabled"> и добавьте isDisabled в атрибут ng-disabled ng-disabled="isDisabled", поэтому при выборе кнопки флажка отключена и снимите флажок, включите кнопку.

См. ссылку http://plnkr.co/edit/e3w54TZEmfj8h5O6BX7B?p=preview

Ответ 10

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<body ng-app>
    <button type="submit" name="submit" class="btn btn-success" ng-disabled="isDisabled" ng-click="isDisabled=true">Hochladen</button> isDisabled={{isDisabled}}
</body>