de-vraag
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
Pradeep Jaiswar
Pradeep Jaiswar
Question

AngularJS kelompok kotak centang validasi

Saya memiliki daftar periksa kotak, yang setidaknya satu adalah wajib. Saya telah mencoba untuk mencapai hal ini melalui AngularJS validasi, tetapi memiliki waktu yang sulit. Di bawah ini adalah kode saya:

// Code goes here for js 

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

function Ctrl($scope) {
  $scope.formData = {};
  $scope.formData.selectedGender = '';
  $scope.gender = [{
    'name': 'Male',
    'id': 1
  }, {
    'name': 'Female',
    'id': 2
  }];
  $scope.formData.selectedFruits = {};
  $scope.fruits = [{
    'name': 'Apple',
    'id': 1
  }, {
    'name': 'Orange',
    'id': 2
  }, {
    'name': 'Banana',
    'id': 3
  }, {
    'name': 'Mango',
    'id': 4
  }, ];
  $scope.submitForm = function() {

  }
}
// Code goes here for html
<!doctype html>
<html ng-app="App">

<head>
  <!-- css file -->
  <!--App file -->
  <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.js"></script>
  <!-- External file -->
</head>

<body>
  <div ng-controller="Ctrl">
    <form class="Scroller-Container">
      <div ng-app>

        <form class="Scroller-Container" ng-submit="submit()" ng-controller="Ctrl">
          <div>
            What would you like?
            <div ng-repeat="(key, val) in fruits">
              <input type="checkbox" ng-model="formData.selectedFruits[val.id]" name="group[]" id="group[{{val.id}}]" required />{{val.name}}
            </div>
            <br />
            <div ng-repeat="(key, val) in gender">
              <input type="radio" ng-model="$parent.formData.selectedGender" name="formData.selectedGender" id="{{val.id}}" value="{{val.id}}" required />{{val.name}}
            </div>
            <br />
          </div>
          <pre>{{formData.selectedFruits}}</pre>
          <input type="submit" id="submit" value="Submit" />
        </form>
      </div>
      <br>
    </form>
  </div>
</body>

</html>

Berikut ini adalah kode di plunker: http://plnkr.co/edit/Bz9yhSoPYUNzFDpfASwt?p=preview Telah ada yang melakukan ini pada AngularJS? Membuat checkbox yang dibutuhkan, memaksa saya untuk pilih semua kotak centang nilai-nilai. Masalah ini juga tidak didokumentasikan dalam AngularJS dokumentasi.

52 2013-10-28T10:58:47+00:00 4
T J
T J
Pertanyaan edit 23 Mei 2016 в 7:57
Pemrograman
javascript
jquery
angularjs
Solution / Answer
 Klaster_1
Klaster_1
28 Oktober 2013 в 11:39
2013-10-28T11:39:37+00:00
Lebih
Sumber
Sunting
#22641126

Jika anda ingin memerlukan setidaknya satu item dalam kelompok yang sedang dipilih,'s mungkin untuk menentukan dinamis diperlukan atribut dengan ng-diperlukan.

Untuk jenis kelamin tombol radio ini akan menjadi mudah:

<input
    type="radio"
    ng-model="formData.selectedGender"
    value="{{val.id}}"
    ng-required="!formData.selectedGender"
>

Centang kelompok akan mudah juga, jika anda menggunakan array untuk menyimpan buah-buahan yang dipilih (hanya memeriksa hotel yang panjang), tapi dengan objek itu's diperlukan untuk memeriksa apakah ada nilai-nilai yang ditetapkan untuk berlaku dengan filter atau fungsi di controller:

$scope.someSelected = function (object) {
  return Object.keys(object).some(function (key) {
    return object[key];
  });
}
<input
    type="checkbox"
    value="{{val.id}}"
    ng-model="formData.selectedFruits[val.id]"
    ng-required="!someSelected(formData.selectedFruits)"
>

Update:

const someSelected = (object = {}) => Object.keys(object).some(key => object[key])

Juga perlu diingat bahwa itu akan mengembalikan false jika nilai adalah 0.

 Klaster_1
Klaster_1
Jawaban edit 27 Januari 2016 в 5:02
101
0
Tom Spencer
Tom Spencer
5 April 2016 в 12:59
2016-04-05T12:59:14+00:00
Lebih
Sumber
Sunting
#22641127

Terima kasih untuk Klaster_1 untuk jawaban yang diterima. I've dibangun ini dengan menggunakan ng-change pada kotak input untuk menetapkan lingkup lokal variabel, yang akan digunakan sebagai ng-diperlukan ekspresi. Hal ini untuk mencegah menjalankan someSelected() pada setiap dicerna.

Berikut ini adalah plunkr menunjukkan ini: http://embed.plnkr.co/ScqA4aqno5XFSp9n3q6d/

Berikut ini adalah HTML dan JS untuk anak cucu.

<!DOCTYPE html>
<html ng-app="App">

<head>
  <meta charset="utf-8" />
  <script data-require="[email protected]" data-semver="1.4.9" src="https://code.angularjs.org/1.4.9/angular.js"></script>
  <script src="script.js"></script>
</head>

<body>
  <div ng-controller="AppCtrl">
    <form class="Scroller-Container" name="multipleCheckbox" novalidate="">
      <h3>What would you like?</h3>
      <div ng-repeat="fruit in fruits">
        <input type="checkbox" ng-model="formData.selectedFruits[fruit.name]" ng-change="checkboxChanged()" ng-required="!someSelected" /> {{fruit.name}}
      </div>
      <p style="color: red;" ng-show="multipleCheckbox.$error.required">You must choose one fruit</p>
    </form>
    <pre>Fruits model:
{{formData.selectedFruits | json}}</pre>
  </div>
</body>

</html>
angular
  .module('App', [])
  .controller('AppCtrl', function($scope) {

    var selectedFruits = {
      Mango: true
    };

    var calculateSomeSelected = function() {
      $scope.someSelected = Object.keys(selectedFruits).some(function(key) {
        return selectedFruits[key];
      });
    };

    $scope.formData = {
      selectedFruits: selectedFruits
    };

    $scope.fruits = [{
      'name': 'Apple'
    }, {
      'name': 'Orange'
    }, {
      'name': 'Banana'
    }, {
      'name': 'Mango'
    }];

    $scope.checkboxChanged = calculateSomeSelected;

    calculateSomeSelected();
  });
2
0
Saras Arya
Saras Arya
17 Januari 2017 в 3:57
2017-01-17T15:57:23+00:00
Lebih
Sumber
Sunting
#22641129

Oke mungkin sangat terlambat ke pesta tapi jika anda memiliki sebuah array dari objek yang anda lihat, solusinya hanya memeriksa panjang dari array dari objek yang dipilih bekerja untuk saya. HTML

<div ng-repeat="vehicle in vehicles">
    <input type="checkbox" name="car" ng-model="car.ids[vehicle._id]" ng-required=" car.objects.length <= 0"> {{vehicle.model}} {{vehicle.brand}} <b>{{vehicle.geofenceName}}</b>
</div>

JS

$scope.vehicles = [{},{}] // Your array of objects;
$scope.car = {
    ids: {},
    objects: []
};

$scope.$watch(function() {
    return $scope.car.ids;
}, function(value) {
    $scope.car.objects = [];
    angular.forEach($scope.car.ids, function(value, key) {
        value && $scope.car.objects.push(getCategoryById(key));
    });
}, true);

function getCategoryById(id) {
    for (var i = 0; i < $scope.vehicles.length; i++) {
        if ($scope.vehicles[i]._id == id) {
            return $scope.vehicles[i];
        }
    }
}

Saya memahami apa yang terjadi dalam larutan ini bahwa anda memeriksa semua kotak centang opsi untuk tahu mana yang diklik. Tapi dari apa yang saya tahu ini adalah jauh cara termudah solusi(untuk memahami dan menerapkan) dan bekerja seperti pesona jika anda tahu bahwa pilihan anda akan terbatas. Untuk waktu yang lebih dioptimalkan solusi. Memeriksa jawaban di atas.

2
0
Vivek Kumar
Vivek Kumar
5 Juli 2016 в 1:50
2016-07-05T13:50:18+00:00
Lebih
Sumber
Sunting
#22641128

Kita bisa mencapai kebutuhan anda tanpa melintasi semua check-kotak instance. Berikut ini adalah contoh kode

<script>
angular.module('atLeastOneExample', [])
.controller('ExampleController', ['$scope', function($scope) {
  $scope.e = function(s){
    eval(s);
  };
}]);
</script>

Di sini saya pembungkus javascript fungsi eval di "e" fungsi untuk mengaksesnya.

<form name="myForm" ng-controller="ExampleController" ng-init="c=0">
  <label>
      Value1: <input type="checkbox" ng-model="checkboxModel.value[0]" ng-change="e('($scope.checkboxModel.value[0])?$scope.c++:$scope.c--')"/>
  </label><br/>
  <label>
      Value2: <input type="checkbox" ng-model="checkboxModel.value[1]" ng-change="e('($scope.checkboxModel.value[1])?$scope.c++:$scope.c--')"/>
  </label><br/>
  value = {{checkboxModel.value}}<br/>
  isAtLeastOneChecked = {{c>0}}
</form>
1
0
Related communities 3
JavaScript Indonesia
JavaScript Indonesia
14 549 pengguna
Grup JavaScript yang membahas JavaScript, framework JS, dan Node JS secara universal. Cek Pinned Message untuk keterangan lebih lanjut. Komunitas ReactJS: https://t.me/react_idn
Buka telegram
Angular Indonesia
Angular Indonesia
3 498 pengguna
Framework web development aplikasi web dan mobile https://angular.io/ Facebook Group https://www.facebook.com/groups/462764390497214/ Github Repo Angular ID https://github.com/angular-indonesia Medium Angular Indonesia https://medium.com/angularid
Buka telegram
jQuery Indonesia
jQuery Indonesia
343 pengguna
Learning jQuery & Solve Problem
Buka telegram
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
UbiBot UK
Terdaftar 14 jam yang lalu
2
Галина Утяшова
Terdaftar 1 hari yang lalu
3
Asilbek Qadamboyev
Terdaftar 4 hari yang lalu
4
Akshit Mehta
Terdaftar 1 minggu yang lalu
5
me you
Terdaftar 1 minggu yang lalu
ID
JA
KO
RU
© de-vraag 2022
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi