//2017/08/29從PAIM grid5相關util到PSGW。 window.onhelp = function(){ return false; }; $( function(){ $( document ).on( 'keydown', doKeyDown ); $( document ).on( 'keydown', doFunctionKey ); }); function doKeyDown( eventObject ){ var keyCode = eventObject.keyCode; var ctrlKey = eventObject.ctrlKey; var shiftKey = eventObject.shiftKey; var idNames; if( keyCode == 112 && shiftKey ) idNames = ['resetButton','searchResetButton']; else if( keyCode == 114 && shiftKey ) idNames = ['addButton5']; else if( keyCode == 113 && !shiftKey && !ctrlKey ) idNames = ['addButton']; else if( keyCode == 114 && !shiftKey && !ctrlKey ) idNames = ['updateButton']; else if( keyCode == 115 && !shiftKey && !ctrlKey ) idNames = ['deleteButton']; else if( keyCode == 117 && !shiftKey && !ctrlKey ) idNames = ['searchButton']; else if( keyCode == 118 && !shiftKey && !ctrlKey ) idNames = ['printButton']; else if( keyCode == 123 && shiftKey ) idNames = ['searchAddButton']; else return true; console.log( 'doKeyDown():keyCode:', keyCode + ', shfitKey:' + shiftKey ); var $mytabs = $( '#mytabs' ); var $button = null; if( $mytabs.length == 0 ){ console.log( 'no tab' ); $.each( idNames, function(){ if(idNames[0] == 'addButton5'){ $button = $( '[id*=_' + this + ']' ); }else{ if(($( '[id*=_addButton5]' ).length != 0)&& (keyCode == 113)){ return true; } $button = $( '[id*=_' + this + ']' ).filter(":visible"); } if( $button.length != 0 ) return false; }); }else{ var selectedIndex = $mytabs.tabs( 'option', 'selected' ); console.log( 'has tab, selectedIndex:' + selectedIndex ); $.each( idNames, function(){ if(idNames[0] == 'addButton5'){ $button = $( '[id*=_' + this + ']', $mytabs.children( 'div' ).eq( selectedIndex ) ); }else{ if(($( '[id*=_addButton5]', $mytabs.children( 'div' ).eq( selectedIndex ) ).length != 0) && (keyCode == 113)){ return true; } $button = $( '[id*=_' + this + ']', $mytabs.children( 'div' ).eq( selectedIndex ) ).filter(":visible"); } if( $button.length != 0 ) return false; }); } if( $button == null || $button.length == 0 ){ console.log( '找不到指定的 button' ); return; } if( $button.length > 1 ){ alert( 'trigger 的 button 有二個以上' ); return; } //event.keyCode = 0; if( !$button.prop( 'disabled' ) ){ console.log( 'functionKey, trigger button id:' + $button.attr( 'id' ) ); var $targetNode = $(eventObject.target); $targetNode.focusout(); if( $.isPageBlock() ) { console.log('Page is bloked') return; } $button.focus().trigger( 'click' ); }else console.log( 'button is dialbed, buttonId:' + $button.attr( 'id' ) ); return false; } function doFunctionKey( eventObject ){ var keyCode = eventObject.keyCode; var ctrlKey = eventObject.ctrlKey; var shiftKey = eventObject.shiftKey; var altKey = eventObject.altKey; //只有按 ctrl, or alt or shift if( keyCode == 16 || keyCode == 17 || keyCode == 18 ) return; if( $.isPageBlock() ) { console.log('Page is bloked') return; } console.log( 'doFunctionKey():keyCode:' + keyCode + ', ctrlKey:' + ctrlKey + ', shfitKey:' + shiftKey + ', altKey:' + altKey ); var functionKey = ''; if( ctrlKey ) functionKey += 'ctrl_'; if( shiftKey ) functionKey += 'shift_'; if( altKey ) functionKey += 'alt_'; functionKey += keyCode; console.log( 'functinKey:' + functionKey ); var $functionKeyBtn; var $tab = $( '.ui-tabs' ); if( $tab.length > 0 ){ //有tab存在 var selectedIndex = $tab.tabs( 'option', 'selected' ); console.log( 'has tab, selectedIndex:' + selectedIndex ); var currentTab = $tab.children( 'div' ).eq( selectedIndex ); $functionKeyBtn = $('a[functionkey=' + functionKey + '], :button[functionkey=' + functionKey + ']' ,currentTab); //如果currentTab裡找不到$functionKeyBtn,找tab外面的。 if ( $functionKeyBtn.length == 0 ) { $functionKeyBtn = $( 'a[functionkey=' + functionKey + '], :button[functionkey=' + functionKey + ']' ) .not( $tab.find( 'a[functionkey=' + functionKey + '], :button[functionkey=' + functionKey + ']' ) ); } }else{ $functionKeyBtn = $( 'a[functionkey=' + functionKey + '], :button[functionkey=' + functionKey + ']' ); } /** * 如果畫面有Dialog,而且BODY有locked屬性,則不執行快捷鍵的功能 */ //為確定button是在Dialog內,先判斷最靠近button的DIV有class屬性,再看class有無dialog字眼 var $hasDialog = $functionKeyBtn.closest( 'div' ).attr( 'class' ); if( $hasDialog !== undefined ) { if( !$hasDialog.match( 'dialog' ) ) { //若button不在Dialog內,且Body的locked屬性為true不繼續往下執行 if( $( 'body' ).attr( 'locked' ) ) return ; } } if ( $functionKeyBtn.length > 0 ) { var $targetNode = $( eventObject.target ); $targetNode.focusout(); $functionKeyBtn.filter( ":enabled" ).focus().trigger( 'click' ); // stop broswer all original event. // ie8以下不work,所以加以下判斷。 var event = window.event || eventObject; event.keyCode = 0; return false; } } ( function( $ ){ $.fn.functionkey = function( settings ){ var defaultSettings = { keyCode : null, // key code, refer to http://www.webonweboff.com/tips/js/event_key_codes.aspx ctrl : false, // 是否要加 ctrl shift : false, // 是否要加 shift alt : false, // 是否要加 alt debug : false }; var newSettings = $.extend( defaultSettings, settings ); if( !checkSettings( newSettings ) ) return; return this.each( function(){ var functionKey = ''; if( newSettings.ctrl ) functionKey += 'ctrl_'; if( newSettings.shift ) functionKey += 'shift_'; if( newSettings.alt ) functionKey += 'alt_'; functionKey += newSettings.keyCode; $(this).attr( 'functionkey', functionKey ); if( newSettings.debug ) console.log( $(this) ); }); }; function checkSettings( newSettings ){ var keyCode = newSettings.keyCode; var ctrl = newSettings.ctrl; var shift = newSettings.shift; var alt = newSettings.alt; if( keyCode == null || typeof( keyCode ) != 'number' ){ alert( 'keyCode 指定的格式不對, keyCode:' + keyCode ); return false; } if( ctrl == null || typeof( ctrl ) != 'boolean' ){ alert( 'ctrl 指定的格式不對, ctrl:' + ctrl ); return false; } if( shift == null || typeof( shift ) != 'boolean' ){ alert( 'shift 指定的格式不對, shift:' + keyCode ); return false; } if( alt == null || typeof( alt ) != 'boolean' ){ alert( 'alt 指定的格式不對, alt:' + alt ); return false; } return true; } $.isPageBlock = function () { var data = $( window ).data(); return data["blockUI.isBlocked"] == 1 ? true : false; } })( jQuery ); $.blockFunctionKey = false; $.blockFun = function( handler ) { var _this = this; $.blockUI(); setTimeout(function(){ handler.apply(_this, arguments); $.unblockUI(); },300); }