JSFiddle - React, Tailwind, and code Playground
HTML
<form method="post" action="javascript:void 0" onsubmit="return alert('form posted')"
onkeypress="nextOnEnter(event)">
<input type="text" name="" value="" tabindex="0"/>
<br />
<input type="text" name="" value="" tabindex="1"/>
<br />
<input type="text" name="" value="" tabindex="2"/>
<br />
<input type="checkbox" value="" tabindex="3"> box1
<input type="checkbox" value=""> box2 (not tabbable)
<br />
<input type="text" name="" value="" tabindex="4"/>
<br />
<input type="submit" value=" Post " tabindex="5">
</form>
JavaScript
function nextOnEnter(e) {
e = e || event;
var obj = e.srcElement || e.target;
nextOnEnter.fields = nextOnEnter.fields || getTabbableFields();
if (!(obj.tagName && (obj.tagName.match(/input/i))) || obj.getAttribute('type').match(/submit/i)) {
return true;
}
if (e.preventDefault){
e.preventDefault();
} else if (e.stopPropagation){
e.stopPropagation();
} else {
e.returnValue = false;
}
if (e.keyCode === 13) {
var tabi = parseInt(obj.getAttribute('tabindex'),10);
if ( tabi+1 < nextOnEnter.fields.length ){
nextOnEnter.fields[tabi+1].focus();
}
return false;
}
}
function getTabbableFields(form){
form = form || document.forms[0];
var ret = [],
inpts = form.getElementsByTagName('input'),
i = inpts.length;
while (i--){
var tabi = parseInt(inpts[i].getAttribute('tabindex'),10),
txtType = inpts[i].getAttribute('type');
ret[tabi] = inpts[i];
}
return ret;
}