I have a form having mutiple checkbox
and related textarea
fields for taking comment. Please check demo here
When user selects checkbox first and then enter value in comment then comment value does not get store. If user enters comment value first and then checks the checkbox then value gets added.
textarea
values are optional
. If user checks checkbox then comment should get added. if checkbox is checked and then comment is entered then comment should get added. If comment is added first and then checkbox is checked then also comment should get added. If that checkbox is uncheck then that should get remove. The behavior should be same with select/unselect all option.
How should I do this?
Html
<div style="text-align:center">
<h1>
{{ title }}
</h1>
</div>
<div class="container">
<div class="text-center mt-5">
<div class="row">
<div class="col-md-6">
<ul class="list-group">
<li class="list-group-item">
<input
type="checkbox"
[(ngModel)]="masterSelected"
name="list_name"
value="m1"
(change)="checkUncheckAll()"
/>
<strong>Select/ Unselect All</strong>
</li>
</ul>
<ul class="list-group">
<li class="list-group-item" *ngFor="let item of checklist">
<input
type="checkbox"
[(ngModel)]="item.isSelected"
name="list_name"
value="{{ item.id }}"
(change)="isAllSelected()"
/>
<textarea [(ngModel)]="item.comment">{{ item.comment }}</textarea>
{{ item.value }}
</li>
</ul>
</div>
<div class="col-md-6">
<code>{{ checkedList }}</code>
</div>
</div>
</div>
</div>
TS
import { Component } from '@angular/core';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css'],
})
export class AppComponent {
name = 'Angular';
masterSelected: boolean;
checklist: any;
checkedList: any;
constructor() {
this.masterSelected = false;
this.checklist = [
{ id: 1, value: 'Elenor Anderson', comment: '', isSelected: false },
{ id: 2, value: 'Caden Kunze', comment: 'test', isSelected: true },
{ id: 3, value: 'Ms. Hortense Zulauf', comment: '123', isSelected: true },
{ id: 4, value: 'Grady Reichert', comment: '', isSelected: false },
{ id: 5, value: 'Dejon Olson', comment: '', isSelected: false },
{ id: 6, value: 'Jamir Pfannerstill', comment: '', isSelected: false },
{ id: 7, value: 'Aracely Renner DVM', comment: '', isSelected: false },
{ id: 8, value: 'Genoveva Luettgen', comment: '', isSelected: false },
];
this.getCheckedItemList();
}
// The master checkbox will check/ uncheck all items
checkUncheckAll() {
for (var i = 0; i < this.checklist.length; i++) {
this.checklist[i].isSelected = this.masterSelected;
}
this.getCheckedItemList();
}
// Check All Checkbox Checked
isAllSelected() {
this.masterSelected = this.checklist.every(function (item: any) {
return item.isSelected == true;
});
this.getCheckedItemList();
}
// Get List of Checked Items
getCheckedItemList() {
this.checkedList = [];
for (var i = 0; i < this.checklist.length; i++) {
if (this.checklist[i].isSelected)
this.checkedList.push(this.checklist[i]);
}
this.checkedList = JSON.stringify(this.checkedList);
}
}
Please help and guide.
Just add (input)="getCheckedItemList()"
to your textarea
.