2016-02-29 2 views
0

Звучит легко и хорошо известно, верно? Я так и думал. Как это сделать в angularJS.Отключить кнопку после формы submit

CSHTML

@using (Html.BeginForm("Order", "Shop", FormMethod.Post, new { @class = "form-horizontal", role = "form" })) 
{ 
<div class="container" ng-app="order" ng-controller="orderController"> 
     <button type="submit" ng-disabled="orderButtonClicked" ng-click="orderClicked()" class="btn btn-primary btn-block tf-btn btn-lg">Place Order</button> 
</div> 
} 

AngularJS

angular.module("order", []) 
.controller("orderController", ['$scope', '$http','$filter', function ($scope, $http, $filter) { 

    $scope.orderButtonClicked = false; 

    $scope.orderClicked = function() { 
    $scope.orderButtonClicked = true; 

    }  
}]); 

Как и многие другие сообщили, а форма не подает при отключении или удалении кнопки. this Ответ сделал то же самое, он утверждает, что он работает, но для меня нет выхода.

Вы можете предположить, что угловая установка настроена правильно, отключение кнопки работает нормально.

+0

В общем, я нашел, что лучший способ сделать это - * скрыть * кнопку отправки при нажатии, а не удалять или отключать ее - независимо от того, какую библиотеку js или серверную бэкэнд я использую. Затем я заменяю его тем, что выглядит как отключенная кнопка отправки или индикатор выполнения или что-то подходящее для этой задачи. – Dave

+0

Спасибо, Дэйв, хотя на самом деле не очень приятно видеть, что кнопка уходит, когда нажимаешь на нее, она работает с 'ng-hide'. – CularBytes

+0

Ну, ему не нужно уходить, по крайней мере, не так, как знает пользователь - см. Мой ответ. – Dave

ответ

1

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

Вместо этого, я вообще скрыть кнопку отправки, и заменить его на что-то подходящее:

<button type="submit" ng-show="!orderButtonClicked" ng-click="orderClicked()" class="btn btn-primary btn-block tf-btn btn-lg">Place Order</button> 
    <button ng-show="orderButtonClicked" disabled class="btn btn-primary btn-block tf-btn btn-lg">Place Order</button> 

Имейте в виду, что даже в этом случае, пользователь может иметь возможность повторно представить, нажав ввести в текстовое окно.

0

Предоставляет ли форму сообщение, если вы не отключите или не удалите кнопку? В «angular documentation» указано, что «по этой причине Angular предотвращает действие по умолчанию (отправка формы на сервер), если только элемент <form> не имеет указанного атрибута action».
Итак, в зависимости от того, что вы пытаетесь выполнить, вам нужно будет добавить javascript в ваш метод .orderClicked, чтобы, например, сделать вызов ajax или что бы вы ни пытались выполнить.

+0

Да, форма отправляется, если я вывожу атрибут 'ng-disabled'. То, что я пытаюсь выполнить, - отключить кнопку при отправке формы, чтобы никакие дублированные формы не были выполнены. – CularBytes

0

Попробуйте так:

<div ng-app="myApp" ng-controller="myCtrl"> 
    <form> 
     <input type="submit" ng-disabled="orderButtonClicked" ng-click="orderClicked()"> 
    </form> 
</div> 

<script> 
    var app = angular.module('myApp', []); 
    app.controller('myCtrl', function($scope) { 
    $scope.orderButtonClicked = false; 

    $scope.orderClicked = function() { 
     $scope.orderButtonClicked = true; 
    } 
}); 
</script> 
+0

Вы имеете в виду переключение формы и div вокруг, правильно? Сделано, что не работает – CularBytes

+0

это странно не работает .. может быть, какой-то другой скрипт вмешивается в это поведение, попытайтесь поместить мой код внутри какой-то простой html-страницы, работает как шарм! –

0

я ставлю точку останова там и посмотреть, если orderButtonClicked установлено значение истинно, когда orderClicked() срабатывает. Еще одна мысль: у меня есть опыт работы с этой проблемой до того, когда у меня есть ng-if где-то внутри области контроллера в html. Это связано с тем, что угловой создает новую область внутри этого ng-if dom. Лучший способ избежать этого - использовать controllerAs, а затем получить доступ к свойству scope с помощью имя_контроляName.propertyName.

+0

Привет, я могу положить на него точку останова или просто распечатать консоль, эфир, я на 100% уверен, что это правда, и моя кнопка отключена. Контроллер. Так как у меня это есть на других моих страницах, вы убедили меня также переключить эту страницу, к сожалению, она не решает проблему. – CularBytes

+0

попытайтесь поместить его в $ timeout(). Посмотрите, будет ли форсировать другой цикл дайджеста обновить dom. – dannielum

Смежные вопросы