【问题标题】:select radio button values multiple times Angularjs多次选择单选按钮值Angularjs
【发布时间】:2017-06-29 21:13:49
【问题描述】:

我从变量列表中创建了多个单选按钮,我希望能够选择任何一个按钮并能够重复选择它。 我编写的代码只允许我选择一次选项,当我选择之前已经选择的选项时,它不会让我选择。 请帮我解决一下这个。 我只在下面粘贴了与我的问题相关的代码部分。请忽略任何语法错误并建议是否可以通过其他更好的方式来实现。

$scope.protocols = ['L3 Sanity', 'L2 Sanity', 'ROUTING', 'STP', 'VLAN', 'Interface Scale', 'VLAN SCALE'];
$scope.reserveTB = function selectPT(PT) {
			  $scope.option=PT;
      };
<h3>Choose the protocol suite:</h3>
<label ng-repeat="protoName in protocols">
<input type="radio" name ="PTCL" 
       ng-model="selectedPT" value="{{protoName}}" 
       ng-change='selectPT(selectedPT)'>{{protoName}}<br>
</label>
<div>
<h3>Selected option:</h3>
<br>{{option}}
</div>

【问题讨论】:

  • 你为什么要反复选择东西——你想用它来实现什么。一旦你选择了一个选项,你应该完成了吗?
  • 要求是,一旦选择了一个选项,就会产生一个对应的服务。一旦该服务执行完毕,用户应该能够再次启动该服务。
  • 所以添加一个按钮 - 更清晰和可用
  • 所以,在我写“$scope.option=PT;”的地方,我实际上是通过生成一个http请求在后端启动一个服务。我希望现在要求很明确。
  • 我不能拥有那个。因为选择协议时,我将显示应在其上执行服务的兼容设备列表。因此,我需要来自单选按钮的值,而不仅仅是一个按钮

标签: javascript html angularjs radio-button


【解决方案1】:

根据您的 qstn,您有多个 radio buttons 选项,但想随时选择 1 并且还想取消选择它。 理想情况下,checkboxes 似乎是正确的选择。

但如果您需要使用单选按钮,请参阅下面的代码。

另外,您的ng-model 应该是hierarchical (其中必须有点(.)。), 因为ng-repeat 创建了新的child scope.,并且您的属性被新范围覆盖。

工作代码:

var app = angular.module('app', []);
app.controller('MainCtrl', function($scope) {
  $scope.valChanged = false;
  $scope.protocols = ["L3 Sanity", "L2 Sanity", "ROUTING", "STP", "VLAN", "Interface Scale", "VLAN SCALE"];
  $scope.data = {selectedPT: $scope.protocols[0]};

  $scope.toggle = function() {
    if (!$scope.valChanged) {
      $scope.data.selectedPT = "";
    }
    $scope.valChanged = false;
  }
  $scope.changefn = function(){
    $scope.valChanged = true;
    // you have updated value of $scope.data.selectedPT, 
    // and can do watever you want, like service call
  }
});
<script src="https://code.angularjs.org/1.5.2/angular.js"></script>
<div ng-app="app">
  <div ng-controller="MainCtrl">
    <h3>Choose the protocol suite:</h3>
    <div ng-repeat="protoName in protocols track by $index">
       <input type="radio" name ="PTCL{{$index}}" 
       ng-model="data.selectedPT" 
       ng-value="protoName" 
       ng-change="changefn()"
       ng-click="toggle()">{{protoName}}
   </div>
    <div>
      <h3>Selected option : {{data.selectedPT}}</h3>      
    </div>
  </div>
</div>

【讨论】:

  • 这正是我所需要的。非常感谢@anoop。你拯救了我的一天。
  • @AmithB:很高兴为您提供帮助..:),请点赞和mark it answer
【解决方案2】:

ng-change 函数名应该是selectPT

angular.module("app",[])
.controller("ctrl",function($scope){

$scope.protocols = ['L3 Sanity', 'L2 Sanity', 'ROUTING', 'STP', 'VLAN', 'Interface Scale', 'VLAN SCALE'];
$scope.selectPT = function (PT) { 
			  $scope.option=PT;
};
})
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app" ng-controller="ctrl">
 <h3>Choose the protocol suite:</h3>
<label ng-repeat="protoName in protocols">
<input type="radio" 
       ng-model="selectedPT" value="{{protoName}}" 
       ng-change='selectPT(selectedPT)'>{{protoName}}<br>
</label>
<div>
<h3>Selected option:</h3>
<br>{{option}}
</div>
</div>

【讨论】:

  • 就像我说的,我在粘贴之前重命名了函数名。在我的原始代码中,函数名称是“reserveTB”。请忽略该错误并针对此问题提出解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-25
  • 2018-07-15
  • 2012-10-16
  • 1970-01-01
  • 1970-01-01
  • 2013-04-22
相关资源
最近更新 更多