将复选框更改为切换样式按钮

Posted

技术标签:

【中文标题】将复选框更改为切换样式按钮【英文标题】:Changing a checkbox to a switch style button 【发布时间】:2019-02-17 14:54:32 【问题描述】:

我正在尝试将我的复选框更改为开关样式。该复选框以ng-repeat 呈现。问题是,当我点击任何开关样式的复选框时,只有顶部的复选框会发生变化。

怎么了?

var app = angular.module("myApp", []);
app.controller("myCtrl", function($scope) 
  $scope.records = [
    "John Doe",
    "Tom Jones",
    "James Riley",
    "Ted Mandy",
  ]
);
input[type=checkbox] 
  height: 0;
  width: 0;
  visibility: hidden;


label 
  cursor: pointer;
  text-indent: -9999px;
  width: 60px;
  height: 23px;
  background: grey;
  display: block;
  border-radius: 100px;
  position: relative;


label:after 
  content: '';
  position: absolute;
  top: 5px;
  left: 5px;
  width: 18px;
  height: 12px;
  background: #fff;
  border-radius: 90px;
  transition: 0.3s;


input:checked+label 
  background: #bada55;


input:checked+label:after 
  left: calc(100% - 5px);
  transform: translateX(-100%);


label:active:after 
  width: 130px;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdnjs.cloudflare.com/ajax/libs/mdbootstrap/4.5.4/css/mdb.min.css" rel="stylesheet">

<body ng-app="myApp" ng-controller="myCtrl">
  <table>
    <tr>
      <th>Names</th>
      <th>Tick</th>
    </tr>
    <tr ng-repeat="x in records">
      <td>x</td>
      <td> <input type="checkbox" id="switch" />
        <label for="switch"></label></td>
    </tr>
  </table>
</body>

View at w3schools.com

【问题讨论】:

【参考方案1】:

您没有将重复的复选框输入绑定到任何模型。

此外,您正在重复使用相同的 id 值。

考虑扩展您的 records 模型,使其也包含复选框的活动状态。

<tr ng-repeat="record in records">
    <td> record.name </td>
    <td>
        <input type="checkbox" id="switch $index  ng-model="record.active"  />
        <label for="switch $index "></label>
    </td>
</tr>

...

$scope.records = [
     name: "John Doe", active: false ,
     name: "Tom Jones", active: false ,
     name: "James Riley", active: false ,
     name: "Ted Mandy", active: false ,
];

Modified version of your example.

【讨论】:

【参考方案2】:

您正在创建多个具有相同 ID 的复选框。 试试这个:

<tr ng-repeat="(i,x) in records">
    <td>x</td>
    <td>
        <input type="checkbox" id="switchi" />
        <label for="switchi"></label>
    </td>
</tr>

【讨论】:

以上是关于将复选框更改为切换样式按钮的主要内容,如果未能解决你的问题,请参考以下文章

css 样式复选框作为切换按钮

反应复选框不切换

WPF 将 DataGridCheckBoxColumn 更改为红点

将属性更改为只读不起作用

如何使用 jQuery 使用按钮选中/取消选中所有复选框?

如何删除自定义按钮上的细边框?