How to Get Value from Lightning Input Field in LWC

Working with lightning-input fields in Lightning Web Components (LWC) is a common requirement when capturing and processing user inputs in Salesforce. This guide will show you how to effectively retrieve the value of a lightning-input field, with examples for various scenarios.


What is lightning-input in LWC?

lightning-input is a base component in LWC used for creating input fields. It supports various types, such as text, number, email, date, and more. Capturing values from lightning-input is essential for implementing forms and interactive user interfaces.


Getting Values from lightning-input

Basic Example: Using onchange Event

To capture the value when the user updates the input field, use the onchange event.

HTML

<template>
    <lightning-input type="text" label="Enter Name" onchange={handleInputChange}></lightning-input>
</template>

JavaScript

import { LightningElement } from 'lwc';

export default class InputExample extends LightningElement {
    handleInputChange(event) {
        const inputValue = event.target.value; // Get the input value
        console.log('Input Value:', inputValue);
    }
}

Using oninput for Real-Time Updates

If you need to capture input as the user types, use the oninput event.

HTML

<template>
    <lightning-input type="text" label="Enter Name" oninput={handleInput}></lightning-input>
</template>

JavaScript

import { LightningElement } from 'lwc';

export default class InputExample extends LightningElement {
    handleInput(event) {
        const inputValue = event.target.value;
        console.log('Real-Time Input:', inputValue);
    }
}

Accessing Multiple Input Fields

For forms with multiple fields, you can retrieve values using event.target.name to identify the input field.

HTML

<template>
    <lightning-input type="text" label="First Name" name="firstName" onchange={handleInputChange}></lightning-input>
    <lightning-input type="text" label="Last Name" name="lastName" onchange={handleInputChange}></lightning-input>
</template>

JavaScript

import { LightningElement } from 'lwc';

export default class InputExample extends LightningElement {
    formData = {};

    handleInputChange(event) {
        const fieldName = event.target.name; // Get the input field name
        const fieldValue = event.target.value; // Get the input field value
        this.formData[fieldName] = fieldValue; // Store in an object
        console.log('Form Data:', this.formData);
    }
}

Using a Getter to Retrieve Input Values Dynamically

Sometimes you need to retrieve input values when an action (like a button click) occurs.

HTML

<template>
    <lightning-input type="text" label="Enter Name" data-id="nameInput"></lightning-input>
    <lightning-button label="Get Value" onclick={getInputValue}></lightning-button>
</template>

JavaScript

import { LightningElement } from 'lwc';

export default class InputExample extends LightningElement {
    getInputValue() {
        const inputElement = this.template.querySelector('lightning-input[data-id="nameInput"]');
        const inputValue = inputElement.value; // Access the value
        console.log('Input Value:', inputValue);
    }
}

Working with Input Validation

When retrieving input values, it’s essential to validate the data. You can use checkValidity() and reportValidity() to ensure the input meets the required criteria.

HTML

<template>
    <lightning-input type="email" label="Enter Email" data-id="emailInput" required></lightning-input>
    <lightning-button label="Submit" onclick={handleSubmit}></lightning-button>
</template>

JavaScript

import { LightningElement } from 'lwc';

export default class InputValidationExample extends LightningElement {
    handleSubmit() {
        const emailInput = this.template.querySelector('lightning-input[data-id="emailInput"]');
        if (emailInput.checkValidity()) {
            console.log('Valid Email:', emailInput.value);
        } else {
            emailInput.reportValidity(); // Show validation error
        }
    }
}

Dynamic Input Retrieval with querySelectorAll

If your form contains multiple inputs, use querySelectorAll to retrieve all values dynamically.

HTML

<template>
    <lightning-input type="text" label="First Name" data-id="formInput"></lightning-input>
    <lightning-input type="text" label="Last Name" data-id="formInput"></lightning-input>
    <lightning-button label="Submit" onclick={handleFormSubmit}></lightning-button>
</template>

JavaScript

import { LightningElement } from 'lwc';

export default class FormExample extends LightningElement {
    handleFormSubmit() {
        const inputs = this.template.querySelectorAll('lightning-input[data-id="formInput"]');
        let formData = {};
        inputs.forEach((input) => {
            formData[input.label] = input.value; // Use label as key
        });
        console.log('Form Data:', formData);
    }
}

Best Practices for Handling lightning-input

  1. Use Unique Identifiers:
    • Use data-id or name attributes to distinguish between multiple input fields.
  2. Validate Inputs:
    • Always validate user inputs using checkValidity() and reportValidity() to ensure data integrity.
  3. Reactive Properties:
    • Use @track or @state properties to bind input values dynamically.
  4. Debounce Inputs:
    • Use debouncing techniques for real-time inputs to avoid excessive event handling.

Conclusion

Retrieving values from lightning-input fields in LWC is straightforward with events like onchange and oninput. By combining event handling with Salesforce’s validation features, you can build robust and interactive forms. Use the examples and best practices provided to streamline your data handling in LWC.