2017-02-16 3 views
1

Hallo Ich habe eine Schaltfläche, die basierend auf einer Bedingung aktiviert oder deaktiviert werden muss. Wenn es deaktiviert werden muss, muss ich eine Nachricht anzeigen. Aber das Javascript feuert viele Male so die Nachricht zeigt mehrmals, wenn es nur einmal angezeigt werden muss.Wie verhindert man, dass Javascript mehrmals ausgelöst wird

unten ist das Markup, das die Javascript-Funktion aufruft: -

<button type="submit" class="btn btn-save nm" ng-click="controller.saveOpportunity()" ng-disabled="!(controller.canDealBeClosedByFeeAllocationStatus() && controller.isEnabled('SaveOpportunity'))"> 
       <svg><use xlink:href="../Content/images/c/svg-defs.svg#circle-check"></use></svg> 
       Save 
      </button> 

unter der Funktion Javascript ist: -

canDealBeClosedByFeeAllocationStatus:()-> 
    if this.isReibDeal() && this.data.OpportunitySalesStageIsClose() == true 
     if this.data.FeeAllocationComplete == false 
     ShowMessage('warning', 'Fee Allocation needs to be complete') 
     return this.data.FeeAllocationComplete 
    else 
     return true 

Was ist die Lösung für dieses Problem?

Antwort

0

nutzt ng-disabled

<button ng-disabled="IsDisabled" type="submit" class="btn btn-save nm" ng-click="controller.saveOpportunity()" ng-disabled="!(controller.canDealBeClosedByFeeAllocationStatus() && controller.isEnabled('SaveOpportunity'))"> 
       <svg><use xlink:href="../Content/images/c/svg-defs.svg#circle-check"></use></svg> 
       Save 
      </button> 

in Ihrem Controller

$scope.isDisabled=false; 

in Ihrer Javascript-Funktion gesetzt $scope.IsDisabled=true;

Wenn die Funktion einmal ausgeführt gesetzt $scope.IsDisabled=true

0

Sie sollten nicht so große Funktionen haben, um zu prüfen, ob etwas deaktiviert ist oder nicht, da ng-disabled diese Methode mehrmals überprüfen kann.

ng-disabled zum Beispiel ausgelöst werden kann, auch wenn Sie ng Sie auf etwas in keinem Zusammenhang mit der ng-disabled Methode see console in this example

var app = angular.module('plunker', []); 
 

 
app.controller('MainCtrl', function($scope) { 
 
    $scope.testClick = function(){ 
 
    console.log("click which does not affect disabled flag"); 
 
    }; 
 
$scope.isDisabled=function(){ 
 
    console.log("disabled check function triggered"); 
 
    return true 
 
    
 
}; 
 
});
<!DOCTYPE html> 
 
<html ng-app="plunker"> 
 

 
    <head> 
 
    <meta charset="utf-8" /> 
 
    <title>AngularJS Plunker</title> 
 
    <script>document.write('<base href="' + document.location + '" />');</script> 
 
    <link rel="stylesheet" href="style.css" /> 
 
    <script data-require="[email protected]" src="https://code.angularjs.org/1.4.12/angular.js" data-semver="1.4.9"></script> 
 
    <script src="app.js"></script> 
 
    </head> 
 

 
    <body ng-controller="MainCtrl"> 
 
    <p>Hello {{name}}!</p> 
 
    <div> 
 
     <button ng-click="testClick()">Test</button> 
 
     <button ng-disabled="isDisabled()">Test</button> 
 
     Test {{message}} 
 
    </div> 
 
    
 
    </body> 
 

 
</html>

So ein besserer Ansatz haben, ist die Verwendung ng-disable hört auf eine Flag-Variable wie isDealBeClosedByFee, die Sie entweder auf dem Weg oder bei der Controller-Initialisierung aktualisieren können.

Verwandte Themen