I propose you an alternative to jquery:
const size = document.querySelector('select[data-size]');
const color = document.querySelector('select[data-color]');
const lastSelect = document.querySelector('#data');
size.addEventListener('change', () => {
selectOption();
});
color.addEventListener('change', () => {
selectOption();
});
function selectOption() {
const searchtext = size.value + ' / ' + color.value;
for (var i = 0; i < lastSelect.options.length; ++i) {
if (lastSelect.options[i].text === searchtext) lastSelect.options[i].selected = true;
}
}
<form action="#" method="post">
<select data-size>
<option value="S">S</option>
<option value="M">M</option>
<option value="L">L</option>
</select>
<select data-color>
<option value="Grey">Grey</option>
<option value="Red">Red</option>
<option value="White">White</option>
</select>
<br>
<select id="data">
<option value="S / Grey">S / Grey</option>
<option value="M / Grey">M / Grey</option>
<option value="L / Grey">L / Grey</option>
<option value="S / Red">S / Red</option>
<option value="M / Red">M / Red</option>
<option value="L / Red">L / Red</option>
<option value="S / White">S / White</option>
<option value="M / White">M / White</option>
<option value="L / White">L / White</option>
</select>
</form>
What i used?
- Change both select with own data-attribute (data-size, data-color)
addEventListener
for add Event 'change' to both select and run selectOption()
function
for-loop
+ ===
, for search the option with same text of searchtext (size + color)
I recommend reading:
After comment:
const sizecolor = document.querySelectorAll('.variant');
const lastSelect = document.querySelector('#data');
sizecolor.forEach(select => {
select.addEventListener('change', () => {
selectOption();
});
});
function selectOption() {
const searchtext = sizecolor[0].value + ' / ' + sizecolor[1].value;
for (var i = 0; i < lastSelect.options.length; ++i) {
if (lastSelect.options[i].text === searchtext) lastSelect.options[i].selected = true;
}
}
<form action="#" method="post">
<select class='variant'>
<option value="S">S</option>
<option value="M">M</option>
<option value="L">L</option>
</select>
<select class='variant'>
<option value="Grey">Grey</option>
<option value="Red">Red</option>
<option value="White">White</option>
</select>
<br>
<select id="data">
<option value="S / Grey">S / Grey</option>
<option value="M / Grey">M / Grey</option>
<option value="L / Grey">L / Grey</option>
<option value="S / Red">S / Red</option>
<option value="M / Red">M / Red</option>
<option value="L / Red">L / Red</option>
<option value="S / White">S / White</option>
<option value="M / White">M / White</option>
<option value="L / White">L / White</option>
</select>
</form>
The difference between the other solution, is i used querySelectorAll
with class .variant
and use forEach
for addEventListener
at both select.
I recommend reading: