ENTER = TAB (enh)

One way to use enter as tab key in a form. using: event delegation shift-enter imitates shift-tab works in Opera too

by KooiInc MeHere

HTML

<form method="post" action="javascript:void 0" onsubmit="return alert('form posted')"
      onkeypress="nextOnEnter(event)">
<input type="text" name="" value=""/>
<br />
<input type="text" name="" value=""/>
<br />
<input type="text" name="" value=""/>
<br />
<input type="checkbox" value=""> box1

<input type="checkbox" value=""> box2

<br />    
<input type="text" name="" value=""/>
    <br />
<input type="submit" value=" Post ">
</form>

JavaScript

function nextOnEnter(e) {
    e = e || event;
    var obj = e.srcElement || e.target;
    nextOnEnter.fields = nextOnEnter.fields || getAllInputFields();
    if ( !(obj.tagName && (obj.tagName.match(/input/i))) ||
          obj.getAttribute('type').match(/submit/i) && !e.shiftKey) {
       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)
           , fb = e.shiftKey ? -1 : 1
            
       if (nextOnEnter.fields[tabi+fb]) {
         nextOnEnter.fields[tabi+fb].focus();
       }
       return false;
    }
}

/**
 * only retrieve fields with tabindex attribute set
 */
function getTabbableFields(form){
    form = form || document.forms[0];
    var ret = [],
        inpts = document.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;
}

/** 
 * retrieve all the input fields in given order
 */
function getAllInputFields(form){
    form = form || document.forms[0];
    var inpts = form.getElementsByTagName('input');
        ret = [],
        i = inpts.length;
    while (i--) {
        ret[i] = inpts[i];
        inpts[i].setAttribute('tabindex',i); //you'll need this
    }
    return ret;
}