フォームのフォーカスをエンターキーで次に移動するには!その2
こういう制御は、WEBの世界では嫌われているようですが、個人的には必要です。
なので、過去に書いたものを、ちょっと書き直しました。
なんと[Shift]+[Enter]で、1つ前に戻ります。
ボタンをクリックするするときは、[Ctrl]+[Enter]です。
同じように、checkbox や radio なども [Ctrl]+[Enter] でセットできます
テキストエリアは、[Ctrl]+[Enter]で次に移動。
テキストエリアの1つ前に戻すには、[Ctrl]+[Shift]+[Enter]で可能です
//エンターキーで次のフォームにフォーカスを移す //@cc_on (function ( Listener ) { document./*@if( @_jscript ) attachEvent('on' + @else@*/ addEventListener( /*@end@*/ 'keypress', Listener, false ); window./*@if( @_jscript ) attachEvent('on' + @else@*/ addEventListener( /*@end@*/ 'unload', function ( ) { document./*@if( @_jscript ) detachEvent('on' + @else@*/ removeEventListener( /*@end@*/ 'keypress', Listener, false ); window./*@if( @_jscript ) detachEvent('on' + @else@*/ removeEventListener( /*@end@*/ 'unload', arguments.callee, false ); }, false ); })( //Listener (function ( getN, getP ) { return function ( evt ) { var e = evt./*@if( @_jscript ) srcElement @else@*/ target /*@end@*/; var keyCode = evt./*@if( @_jscript ) keyCode @else@*/ which /*@end@*/; var shift = evt.shiftKey; var ctrl = evt.ctrlKey; var flag = true, n; if( !/INPUT|TEXTAREA|SELECT/.test( e.nodeName ) ) return; if( 27 == keyCode ) return e.blur(); if( 13 == keyCode ) { if( /radio/.test( e.type ) && ctrl ) e.checked = true; if( /checkbox/.test( e.type ) && ctrl ) e.checked = !e.checked; if( /submit|reset|button/.test( e.type ) && ctrl ) flag = false; if( 'TEXTAREA' === e.nodeName && !ctrl ) flag = false; if( flag ) { n = shift ? getP( e ): getN( e ); if( n ) try { n.focus(); } catch( err ) { ;} return evt./*@if( @_jscript ) returnValue = false @else@*/ preventDefault() /*@end@*/; } } }; })( function ( n ) { var e; do { if( !( e = n.firstChild ) ) while( !( e = n.nextSibling ) ) if( !( n = n.parentNode ) ) return null; n = e; } while ( 1 !== n.nodeType || !/INPUT|TEXTAREA|SELECT/.test( n.nodeName ) || 'hidden' === n.type ); return n; }, function ( n ) { var e, e2; do { if( e = n.previousSibling ) while( e2 = e.lastChild ) e = e2; n = e || n.parentNode ; } while ( !n || 1 !== n.nodeType || !/INPUT|TEXTAREA|SELECT/.test( n.nodeName ) || 'hidden' === n.type ); return n; } ) );