TransWikia.com

Removing the value from array after unchecking the checkbox in LWC

Salesforce Asked on December 7, 2021

I have a html table in which there is a lightning-input type checkbox for each row of the table in the child component. On checking the checkbox the row id is passed to the parent component and pushed in to the array. When I uncheck that checkbox the row Id is still present in the array. I want a solution that whenever I check the checkbox the row id is pushed to the array and whenever I uncheck it, the row id should be removed from the array.

Child component code:

HTML

<lightning-input class="input-checkbox" onchange={handleChange} type="checkbox" value={row.Id} data-id={row.Id} </lightning-input>

JS

handleChange(event) {
const customEventCheck = new CustomEvent('childevent', {
detail:event.target.value
});
this.dispatchEvent(customEventCheck);
}

Parent Component Code:

HTML (calling child component)

<template for:each={tableList} for:item={item} >
<child-component key={item.Id} row={item} onchildevent={storeid} >
</child-component>
</template>

JS

@track checkedId=[];

storeid(event){
var rowId = event.detail;
this.checkedId.push(rowId);
}

2 Answers

As suggested by @User6670 you need to pass the additional attribute to store the checkbox value.

In addition to splice, you can also use the filter method to remove the unchecked record.

storeid(event){
    if(event.detail.checked){
         this.checkedId.push(event.detail.val);
    } else {
         this.checkedId = this.checkedId.filter(rowId => rowId !== event.detail.val);
    }
}

Answered by Rahul Gawale on December 7, 2021

You can send an attribute in event which will tell you whether the checkbox is checked or not like this

const customEventCheck = new CustomEvent('childevent', {
detail:{val:event.target.value,checked:event.target.checked}
});

and in parent based on that value you can add or remove the element

var rowId = event.detail.val;
var checked=event.detail.checked;

if(checked){
this.checkedId.push(rowId);
}else{
    var index = this.checkedId.indexOf(rowId);
this.checkedId.splice(index, 1);
}

Answered by User6670 on December 7, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP