【问题标题】:generically disable multiple buttons based on evaluating value通常根据评估值禁用多个按钮
【发布时间】:2015-09-28 16:13:53
【问题描述】:

我有许多按钮,用户可以点击这些按钮来回答问题。有些按钮是正确的答案,有些是不正确的。如果按钮是错误答案,则按钮保持活动状态,但计数器会增加错误答案的计数。如果按钮是正确答案,那么我想增加正确答案计数,更改按钮样式并禁用按钮。代码sn-p(html):

<div class="container" ng-controller="myCtrl">

  <div>
    Right answers: {{ right_answers }}
  </div>

  <div>
    Wrong answers: {{ wrong_answers }}
  </div>

  <button ng-style="answer1Style" ng-click="clickThis('answer1')" ng-disabled='answer1'> Answer1 </button>
  <button ng-style="answer2Style" ng-click="clickThis('answer2')" ng-disabled='answer2'> Answer2 </button>
  <button ng-style="answer3Style" ng-click="clickThis('answer3')" ng-disabled='answer3'> Answer3 </button>
  <button ng-click="clickThis('wrong1')" ng-disabled='wrong1'> Wrong1 </button>
  <button ng-click="clickThis('wrong2')" ng-disabled='wrong2'> Wrong2 </button>
  <button ng-click="clickThis('whatever')" ng-disabled='whatever'> Whatever </button>

</div>

代码sn-p(控制器):

var myCtrl = function($scope) {
  $scope.right_answers = 0;
  $scope.wrong_answers = 0;

  $scope.answers = ['answer1','answer2','answer3'];

  $scope.clickThis = function(answer) {
    if ($scope.answers.indexOf(answer) != -1) {
      $scope.right_answers += 1;
      switch(answer){
        case 'answer1': 
          $scope.answer1 = true;
          $scope.answer1Style = {'background-color':'green', 'color':'white'};
          break;
        case 'answer2': 
          $scope.answer2 = true;
          $scope.answer2Style = {'background-color':'green', 'color':'white'};
          break;
        case 'answer3': 
          $scope.answer3 = true;
          $scope.answer3Style = {'background-color':'green', 'color':'white'};
          break;
      };
    }
    else {
      $scope.wrong_answers += 1;
    };    
  };

};

我的问题是,有没有办法让这个更通用,我不必使用 CASE 并为每个单独的答案包含一个 $scope 以禁用它(或为此更改样式) ,即ng-disabled="answer1"ng-disabled="answer2"$scope.answer1$scope.answer2?

谢谢!

【问题讨论】:

    标签: javascript angularjs


    【解决方案1】:

    您可以将$event 对象作为ngClick 指令的参数传递。

    <button ng-click="clickThis($event, 'answer')"> Answer </button>
    

    然后你就可以在$scope.clickThis函数中对目标元素进行操作了

    $scope.clickThis = function(event, answer) {
      if ($scope.answers.indexOf(answer) != -1) {
        $scope.rightAnswers += 1;
        element = angular.element(event.target);
        element.css({'color': 'white', 'background-color': 'green'});
        element.prop('disabled', true)
      } else {
        $scope.wrongAnswers += 1;
      };
    }
    

    示例:plnkr.co

    【讨论】:

      猜你喜欢
      • 2011-11-19
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多