undefined of the value property. If you want to
give the user the choice to deselect the current option, you can provide an option without a value
<p-select-option></p-select-option>. If you don't want the user to be able to deselect the current option, but still
want to show a placeholder text you can set the option disabled like this
<p-select-option disabled>Please choose an option</p-select-option>.<!doctype html>
<html lang="en" class="auto">
<head>
<title></title>
</head>
<body class="bg-base">
<p-checkbox label="Required" id="required" name="required" checked="true"></p-checkbox>
<p-checkbox label="Allow deselection" id="deselection" name="deselection"></p-checkbox>
<form>
<p-select name="options" label="Some Label" required>
<p-select-option value="1">Option 1</p-select-option>
<p-select-option value="2">Option 2</p-select-option>
<p-select-option value="3">Option 3</p-select-option>
</p-select>
<p-button type="submit">Submit</p-button>
</form>
<p-text>Last submitted data: none</p-text>
<script>
const select = document.querySelector('p-select');
const required = document.querySelector('#required');
const deselection = document.querySelector('#deselection');
required.addEventListener('update', (e) => {
select.toggleAttribute('required', e.detail.checked);
});
deselection.addEventListener('update', (e) => {
if (e.detail.checked) {
select.prepend(document.createElement('p-select-option'));
} else {
document.querySelector('p-select-option:not([value])').remove();
}
});
const debugElement = document.querySelector('p-text');
const form = document.querySelector('form');
form.addEventListener('submit', (e) => {
e.preventDefault();
const formData = new FormData(form);
debugElement.innerText = `Last submitted data: ${formData.get('options')}`;
});
</script>
</body>
</html>img tag within the p-select-option. Be aware
that the p-select-option can only contain a #text and an img node.Some description
718
911
taycan
macan
cayenne
panamera<!doctype html>
<html lang="en" class="auto">
<head>
<title></title>
</head>
<body class="bg-base">
<p-select name="options" label="Some Label" description="Some description">
<p-select-option value="718">
<img src="assets/718.png" />
718
</p-select-option>
<p-select-option value="911">
<img src="assets/911.png" />
911
</p-select-option>
<p-select-option value="taycan">
<img src="assets/taycan.png" />
taycan
</p-select-option>
<p-select-option value="macan">
<img src="assets/macan.png" />
macan
</p-select-option>
<p-select-option value="cayenne">
<img src="assets/cayenne.png" />
cayenne
</p-select-option>
<p-select-option value="panamera">
<img src="assets/panamera.png" />
panamera
</p-select-option>
</p-select>
<script>
</script>
</body>
</html>p-select component is a form-associated custom element that integrates seamlessly with forms. Leveraging the
p-select component. This attribute
establishes the link between the component and the form, enabling the selected value to be included in the form's data
when it's submitted.p-select does not use a native select internally. As a result, it lacks access to native ValidityState
properties and validationMessage, and it cannot display the native validation popover. This means validation behavior
and error display will need to be implemented separately if required.<!doctype html>
<html lang="en" class="auto">
<head>
<title></title>
</head>
<body class="bg-base">
<form>
<p-select name="options" label="Some Label" value="a">
<p-select-option value="a">Option A</p-select-option>
<p-select-option value="b">Option B</p-select-option>
<p-select-option value="c">Option C</p-select-option>
<p-select-option value="d">Option D</p-select-option>
<p-select-option value="e">Option E</p-select-option>
<p-select-option value="f">Option F</p-select-option>
</p-select>
<p-button type="submit">Submit</p-button>
<p-button type="reset">Reset</p-button>
</form>
<p-text>Last submitted data: none</p-text>
<script>
const debugElement = document.querySelector('p-text');
const form = document.querySelector('form');
form.addEventListener('submit', (e) => {
e.preventDefault();
const formData = new FormData(form);
debugElement.innerText = `Last submitted data: ${formData.get('options') || 'none'}`;
});
</script>
</body>
</html>p-select component is externally controlled. Selecting an option triggers a custom
update event, allowing you to use the updated value. Internally, the value will be updated automatically but can be
overwritten by passing in a new value.<!doctype html>
<html lang="en" class="auto">
<head>
<title></title>
</head>
<body class="bg-base">
<p-select name="options" label="Some Label" value="a">
<p-select-option value="a">Option A</p-select-option>
<p-select-option value="b">Option B</p-select-option>
<p-select-option value="c">Option C</p-select-option>
<p-select-option value="d">Option D</p-select-option>
<p-select-option value="e">Option E</p-select-option>
<p-select-option value="f">Option F</p-select-option>
</p-select>
<p-text>Selected value: a</p-text>
<script>
const debugElement = document.querySelector('p-text');
const select = document.querySelector('p-select');
select.addEventListener('update', (e) => {
e.target.value = e.detail.value;
setDebugText(e.detail.value);
});
function setDebugText(value) {
debugElement.innerText = `Selected value: ${value}`;
}
</script>
</body>
</html>p-select component behaves like regular form elements. It updates its value automatically based on user choices,
but can also be changed manually by using the value property. This property takes a string that represent the selected
option value.<!doctype html>
<html lang="en" class="auto">
<head>
<title></title>
</head>
<body class="bg-base">
<p-text-field-wrapper label="Value:"><input name="input-value" type="text" placeholder="e.g. 1" /></p-text-field-wrapper>
<p-button id="btn-input-value" type="button" compact="true">Set Value</p-button>
<p-button id="btn-reset" type="button" compact="true">Reset value</p-button>
<p-select name="options" label="Some Label" value="1">
<p-select-option value="1">Option 1</p-select-option>
<p-select-option value="2">Option 2</p-select-option>
<p-select-option value="3">Option 3</p-select-option>
</p-select>
<p-button id="btn-add" type="button" compact="true">Add option</p-button>
<p-button id="btn-remove" type="button" compact="true">Remove last option</p-button>
<script>
const input = document.querySelector('input');
const select = document.querySelector('p-select');
select.addEventListener('update', () => {
input.value = select.value;
});
document.querySelector('#btn-input-value').addEventListener('click', () => {
select.value = input.value;
});
document.querySelector('#btn-reset').addEventListener('click', () => {
input.value = '';
select.value = '1';
});
document.querySelector('#btn-add').addEventListener('click', () => {
addOption();
});
document.querySelector('#btn-remove').addEventListener('click', () => {
if (select.children.length > 0) {
select.lastChild.remove();
}
});
function addOption() {
const child = document.createElement('p-select-option');
child.innerText = `Option ${select.children.length + 1}`;
child.setAttribute('value', `${select.children.length + 1}`);
select.append(child);
}
</script>
</body>
</html>Some description
Some optgroup label 1
Some optgroup label 2
<!doctype html>
<html lang="en" class="auto">
<head>
<title></title>
</head>
<body class="bg-base">
<p-select name="options" label="Some Label" description="Some description">
<p-optgroup label="Some optgroup label 1">
<p-select-option value="a">
Option A
</p-select-option>
<p-select-option value="b">
Option B
</p-select-option>
<p-select-option value="c">
Option C
</p-select-option>
<p-select-option value="d">
Option D
</p-select-option>
<p-select-option value="e">
Option E
</p-select-option>
<p-select-option value="f">
Option F
</p-select-option>
</p-optgroup>
<p-optgroup label="Some optgroup label 2">
<p-select-option value="g">
Option G
</p-select-option>
<p-select-option value="h">
Option H
</p-select-option>
<p-select-option value="i">
Option I
</p-select-option>
</p-optgroup>
</p-select>
<script>
</script>
</body>
</html>