Your attempts don't work because the radio buttons aren't immediately adjacent to each other, they have label
s between them.
You could get a list of the radio buttons, find the selected one, and the select the next one after it:
const btns = [...document.querySelectorAll('input[name="tabs"]')];
const current = btns.findIndex(btn => btn.checked);
btns[(current + 1) % btns.length].checked = true;
function goToNextButton() {
const btns = [...document.querySelectorAll('input[name="tabs"]')];
const current = btns.findIndex(btn => btn.checked);
btns[(current + 1) % btns.length].checked = true;
}
setInterval(goToNextButton, 800);
<input type="radio" name="tabs" id="tab4">
<label for="tab4">
<span>One</span>
</label>
<input type="radio" name="tabs" id="tab3">
<label for="tab3">
<span>Two</span>
</label>
<input type="radio" name="tabs" id="tab2">
<label for="tab2">
<span>Three</span>
</label>
<input type="radio" name="tabs" id="tab1" checked="">
<label for="tab1">
<span>Four</span>
</label>
That code works on reasonably modern browsers. If you have to support older ones, you may need to fall back to ES5-level code (or transpile), and/or you may need to polyfill iterability as shown here.
Or for a boring ES5 solution :-):
var btns = document.querySelectorAll('input[name="tabs"]');
var n;
for (n = 0; n < btns.length; ++n) {
if (btns[n].checked) {
break;
}
}
if (n < btns.length) {
n = (n + 1) % btns.length;
}
btns[n].checked = true;
function goToNextButton() {
var btns = document.querySelectorAll('input[name="tabs"]');
var n;
for (n = 0; n < btns.length; ++n) {
if (btns[n].checked) {
break;
}
}
if (n < btns.length) {
n = (n + 1) % btns.length;
}
btns[n].checked = true;
}
setInterval(goToNextButton, 800);
<input type="radio" name="tabs" id="tab4">
<label for="tab4">
<span>One</span>
</label>
<input type="radio" name="tabs" id="tab3">
<label for="tab3">
<span>Two</span>
</label>
<input type="radio" name="tabs" id="tab2">
<label for="tab2">
<span>Three</span>
</label>
<input type="radio" name="tabs" id="tab1" checked="">
<label for="tab1">
<span>Four</span>
</label>