/* Ver 2.0.11 ※可與舊版本並存 ※解析度 1920 以上時,由 css 控制放大 1.25 倍 函數調用需再 jQuery 1.9.1 ~ 3.3.1 環境使用 ----------------------------------------------------------------------------------------------------------------------------- ※調整 AlertBoxSetting 變數可做全域設定 以下為可調用函數 呼叫視窗 > alertBox({ 選填項目 }) 關閉視窗 > alertClose('執行狀態', 'Code碼') ※執行狀態分別為('ok'、'cancel') 若無填寫則不會執行結束後函數,但會關閉視窗 若無設定 Code碼 則預設關閉最上層的視窗 a. alert模式時: 設置 'ok'、'cancel' 時,將執行 OnOK、OnCancel、OnClose、OnEnd 函數 b. confirm模式時: 設置 'ok' 時,將執行 OnClose、OnOK、OnEnd 函數 設置 'cancel' 時,將執行 OnCancel、OnClose、OnEnd 函數 c. prompt模式時: 設置 'ok' 時,將執行 OnClose、OnOK、OnEnd 函數 設置 'cancel' 時,將執行 OnCancel、OnClose、OnEnd 函數 d. progress模式時:設置 'ok'、'cancel' 時,將執行 OnOK、OnCancel、OnClose、OnEnd 函數 e. loading模式時: 設置 'ok'、'cancel' 時,將執行 OnOK、OnCancel、OnClose、OnEnd 函數 改變進度條資訊 > alertProgress(百分比, 'Html內容', 自動關閉設定) ※此為 progress 模式專用函數 百分比請輸入純數字設定參數,Html內容為非必填項目,可自行斟酌 若百分比大於100時,將延遲0.5秒(預設)後自動關閉視窗,並執行 OnEnd 函數 自動關閉設定如果設定為 true 為自動關閉,設定為 false 為不關閉,預設為 true 改變loading內容 > alertLoadingMsg('Html內容', 'Code碼') ※此為 loading 模式專用函數,Code碼為非必填項目,可自行斟酌 關閉loading視窗 > alertLoadingEnd('Html內容', 延遲毫秒, 回調函數, 'Code碼') ※此為 loading 模式專用函數 所有參數為非必填項目,可自行斟酌 延遲毫秒請輸入純數字設置,單位為毫秒數 1秒/1000毫秒 回調函數設定後即自動套用至 OnEnd 函數並調用 ----------------------------------------------------------------------------------------------------------------------------- 呼叫視窗 選填項目:使用模式 Mode (預設:'alert') ※分別有下列模式('alert'('A')、'confirm'('C')、'prompt'('PM')、'progress'('PR')、'loading'('L')),括號內大寫字母為縮寫參數 Html內容 Html (預設:'') ※可利用 $(id) 帶入 抬頭文字 Title (預設:'') ※若為空白或 null 則不會顯示,未設定時依照模式帶入預設值 操控列內容 Ctrl (預設:'') ※若為空白或 null 則不會顯示,未設定時依照模式帶入預設值 擴充指令 Setting (預設:{ } ) ※依照各個 Mode 使用模式而有所不同,詳細設定請參考下面各個模式的解說 外層容器Style OutsideStyle (預設:'') 外層容器Class OutsideClass (預設:'') 內層標題Style TitleStyle (預設:'') 內層標題Class TitleClass (預設:'') 內層容器Style InsideStyle (預設:'') 內層容器Class InsideClass (預設:'') 內層控制列Style CtrlStyle (預設:'') 內層控制列Class CtrlClass (預設:'') 點擊其他處關閉視窗 TouchClose (預設:依附全域設定) ※可蓋過全域設定獨立運作 顯示前 執行函數 OnStart (預設:null,設定時請使用 function (Code) { } ) ※執行順序 1,物件建立前執行 顯示時 執行函數 OnRun (預設:null,設定時請使用 function (Code) { } ) ※執行順序 2,物件建立後且動畫前執行 顯示後 執行函數 OnReady (預設:null,設定時請使用 function (Code) { } ) ※執行順序 3,物件建立後且動畫後執行 關閉前 執行函數 OnClose (預設:null,設定時請使用 function (Type, Value) { return true; } ) ※執行順序 4,物件移除前且動畫前執行,若回傳 false 則不接續執行下面動作 確認後 執行函數 OnOK (預設:null,設定時請使用 function (Value) { } ) ※執行順序 5,物件移除前且動畫後執行 取消後 執行函數 OnCancel (預設:null,設定時請使用 function () { } ) ※同上 關閉後 執行函數 OnEnd (預設:null,設定時請使用 function () { } ) ※同上 ----------------------------------------------------------------------------------------------------------------------------- prompt模式 擴充指令:使用模式 Mode (預設:'text') ※分別有下列模式('text'、'password'、'textarea') 預設值 Value (預設:'') 欄位註解 Placeholder (預設:'輸入...') 欄位行數 Rows (預設:3) ※輸入純數字設定參數,使用 textarea 模式時才會生效 預設框選 Select (預設:false) 是否必填 Required (預設:true) ※若資料為空白則自動提示使用者該項目必填 progress模式 擴充指令:延遲關閉時間 Delay (預設:500) ※單位為毫秒數 loading模式 擴充指令:延遲關閉時間 Delay (預設:500) ※單位為毫秒數 ----------------------------------------------------------------------------------------------------------------------------- */ //設定按鈕樣式 Class var AlertBoxSetting = { OkText: '確定', //確認 按鈕文字 CancelText: '取消', //取消 按鈕文字 OkClass: 'button btn_peach', //確認 按鈕樣式 CancelClass: 'button btn_white', //取消 按鈕樣式 CoverSpeed: 200, //遮罩速度 CoverTransition: 'linear', //遮罩過場動畫樣式 StartSpeed: 300, //開啟速度 StartTransition: 'easeOutBack', //開啟過場動畫樣式 EndSpeed: 200, //關閉速度 EndTransition: 'linear', //關閉過場動畫樣式 ScrollType: 'mousewheel', //滾動禁用模式:'overflow'、'mousewheel'、'keydown'、'none' ※建議使用 mousewheel 最佳 TouchClose: false, //是否開啟點擊其他處關閉視窗 (全域設定) ButtonChange: false, //確定按鈕與取消按鈕位置是否要交換 EscClose: true, //使用ESC視窗關閉視窗開關 CloseIcon: false, //是否要使用於 Title 區塊的關閉 icon 按鈕 (progress、loading模式無法使用) Compatible: true, //是否開啟舊版本相容函數 FilterTarget: '#MasterPage_div', //設定濾鏡使用 DOM 元件 FilterBlur: false, //是否開啟失焦濾鏡 (IE不支援、FireFox相容性較差背景有跑版面的可能) FilterBlurValue: 2, //設定失焦濾鏡參數 (輸入純數字設置) }; //宣告專用變數儲存物件 var AlertBoxTempData = {}; var AlertBoxMouseWheelCheck = true; //判斷 body 的滾動條是否要禁用 var AlertBoxBodyScrollValue = 0; //判斷 body 目前的 scrollTop 座標 var AlertBoxKeyupEscCloseTarget; //ESC所使用的當前開啟的視窗辨別變數 var AlertBoxUidCode = 0; //唯一值變數 //開啟視窗 alertBox = function (Setting) { //唯一值變數 AlertBoxUidCode++; //定義預設值 Setting.Mode = Setting.Mode ? Setting.Mode : 'alert'; //使用模式 Setting.Html = Setting.Html ? Setting.Html : ''; //Html內容 Setting.OutsideStyle = Setting.OutsideStyle ? Setting.OutsideStyle : ''; //外層容器Style Setting.OutsideClass = Setting.OutsideClass ? Setting.OutsideClass : ''; //外層容器Class Setting.TitleStyle = Setting.TitleStyle ? Setting.TitleStyle : ''; //內層標題Style Setting.TitleClass = Setting.TitleClass ? Setting.TitleClass : ''; //內層標題Class Setting.InsideStyle = Setting.InsideStyle ? Setting.InsideStyle : ''; //內層容器Style Setting.InsideClass = Setting.InsideClass ? Setting.InsideClass : ''; //內層容器Class Setting.CtrlStyle = Setting.CtrlStyle ? Setting.CtrlStyle : ''; //內層控制列Style Setting.CtrlClass = Setting.CtrlClass ? Setting.CtrlClass : ''; //內層控制列Class Setting.OnStart = Setting.OnStart ? Setting.OnStart : null; //顯示前 執行函數 Setting.OnRun = Setting.OnRun ? Setting.OnRun : null; //顯示時 執行函數 Setting.OnReady = Setting.OnReady ? Setting.OnReady : null; //顯示後 執行函數 Setting.OnOK = Setting.OnOK ? Setting.OnOK : null; //確認後 執行函數 Setting.OnCancel = Setting.OnCancel ? Setting.OnCancel : null; //取消後 執行函數 Setting.OnClose = Setting.OnClose ? Setting.OnClose : null; //關閉前 執行函數 Setting.OnEnd = Setting.OnEnd ? Setting.OnEnd : null; //關閉後 執行函數 Setting.Code = Setting.Mode + '_' + AlertBoxUidCode; //辨識名稱 (系統使用) Setting.ID = null; //使用 dom 物件內容時使用變數 (系統使用) Setting.Setting = Setting.Setting ? Setting.Setting : {}; //擴充指令 Setting.TouchClose = Setting.TouchClose === undefined ? AlertBoxSetting.TouchClose : Setting.TouchClose; //點擊其他處關閉視窗 //對應 Setting.Mode 縮寫參數 if (Setting.Mode === 'A') { Setting.Mode = 'alert'; } else if (Setting.Mode === 'C') { Setting.Mode = 'confirm'; } else if (Setting.Mode === 'PM') { Setting.Mode = 'prompt'; } else if (Setting.Mode === 'PR') { Setting.Mode = 'progress'; } else if (Setting.Mode === 'L') { Setting.Mode = 'loading'; } //若 Setting.Ctrl 未設定 則依照模式賦予設定值 if (Setting.Ctrl === undefined) { var tempOKBtn = ''; var tempCancelBtn = ''; //判斷是否需要顛倒按鈕位置 if (AlertBoxSetting.ButtonChange == true) { if (Setting.Mode == 'alert') { Setting.Ctrl = tempOKBtn; } else if (Setting.Mode == 'confirm') { Setting.Ctrl = tempOKBtn + ' ' + tempCancelBtn; } else if (Setting.Mode == 'prompt') { Setting.Ctrl = tempOKBtn + ' ' + tempCancelBtn; } else if (Setting.Mode == 'progress') { Setting.Ctrl = ''; } } else { if (Setting.Mode == 'alert') { Setting.Ctrl = tempOKBtn; } else if (Setting.Mode == 'confirm') { Setting.Ctrl = tempCancelBtn + ' ' + tempOKBtn; } else if (Setting.Mode == 'prompt') { Setting.Ctrl = tempCancelBtn + ' ' + tempOKBtn; } else if (Setting.Mode == 'progress') { Setting.Ctrl = ''; } } } //判斷是否使用關閉 icon 按鈕 (progress、loading模式、Title不顯示時無法使用) var tempCloseIcon = ''; if (AlertBoxSetting.CloseIcon == true && Setting.Title != '' && Setting.Title != null) { tempCloseIcon = ''; } //若 Setting.Title 未設定 則依照模式賦予設定值 if (Setting.Title === undefined) { if (Setting.Mode == 'alert') { Setting.Title = ' 訊息提示' + tempCloseIcon; } else if (Setting.Mode == 'confirm') { Setting.Title = ' 確認動作' + tempCloseIcon; } else if (Setting.Mode == 'prompt') { Setting.Title = ' 資料輸入' + tempCloseIcon; } else if (Setting.Mode == 'progress') { Setting.Title = ' 執行進度'; } else if (Setting.Mode == 'loading') { Setting.Title = ' 當前狀態'; } } else { if (tempCloseIcon != '') { Setting.Title = Setting.Title + tempCloseIcon; } } // Setting.Setting 依照模式賦予設定值 if (Setting.Mode == 'prompt') { Setting.Setting.Mode = Setting.Setting.Mode ? Setting.Setting.Mode : 'text'; Setting.Setting.Value = Setting.Setting.Value ? Setting.Setting.Value : ''; Setting.Setting.Placeholder = Setting.Setting.Placeholder ? Setting.Setting.Placeholder : '輸入...'; Setting.Setting.Rows = Setting.Setting.Rows ? Setting.Setting.Rows : 3; Setting.Setting.Select = Setting.Setting.Select ? Setting.Setting.Select : 'text'; Setting.Setting.Required = Setting.Setting.Required === undefined ? true : Setting.Setting.Required; } else if (Setting.Mode == 'progress' || Setting.Mode == 'loading') { Setting.Setting.Delay = Setting.Setting.Delay ? Setting.Setting.Delay : 500; } //判斷 Setting.Html 是否為 object 物件 如果是就進行轉換 if (typeof (Setting.Html) == 'object') { //套用變數 Setting.ID = '#' + $(Setting.Html).attr('id'); Setting.Html = $(Setting.Html).html(); //移除前端 dom 物件內的資料 $(Setting.ID).empty(); } //放置於儲存物件變數內 AlertBoxTempData[Setting.Code] = Setting; //執行 OnStart 顯示前 執行函數 if (typeof (Setting.OnStart) == 'function') { Setting.OnStart(Setting.Code); } //啟用滾動禁用 alertBoxDisabledStart(); //填入遮罩 $('body').append('
'); //宣告容器變數 var tempBox = $(".AlertBoxDiv[dom-code='" + Setting.Code + "']"); //放入容器 tempBox.append('' + '' + '' + '' + '
' + '
' + '
'); //如果有 Setting.Title 就放入標題列 if (Setting.Title != '' && Setting.Title != null) { tempBox.find('.AlertBoxDivContent').append('
' + Setting.Title + '
'); } //放入內容區塊 tempBox.find('.AlertBoxDivContent').append('
' + Setting.Html + '
'); //如果有 Setting.Ctrl 就放入控制列 if (Setting.Ctrl != '' && Setting.Ctrl != null) { tempBox.find('.AlertBoxDivContent').append('
' + Setting.Ctrl + '
'); } //判斷若為 prompt 模式時 需要加入輸入視窗 if (Setting.Mode == 'prompt') { //依照擴充設定帶入元件 if (Setting.Setting.Mode == 'text' || Setting.Setting.Mode == 'password') { tempBox.find('.AlertBoxDivHtml').append('
' + '' + '
' + '
'); //綁定鍵盤判斷 $('.AlertBoxDivPromptDOM').keyup(function (event) { if (event.which == 13) { alertClose('ok'); } }); } else if (Setting.Setting.Mode == 'textarea') { tempBox.find('.AlertBoxDivHtml').append('
' + '' + '
'); } } //判斷若為 progress 模式時 需要加入進度條 if (Setting.Mode == 'progress') { //重新套用 內容區塊 內的資料結構 tempBox.find('.AlertBoxDivHtml').empty(); tempBox.find('.AlertBoxDivHtml').html('
' + Setting.Html + '
'); //插入進度條 tempBox.find('.AlertBoxDivHtml').append('
' + '
' + '
' + '0%' + '
' + '
'); } //判斷若為 loading 模式時 需要將欄位置中且最小高度重置 if (Setting.Mode == 'loading') { tempBox.find('.AlertBoxDivHtml').css('text-align', 'center'); tempBox.find('.AlertBoxDivHtml').css('min-height', 'initial'); } //畫面失焦防止連點 $(document.activeElement).blur(); //預設指定聚焦 if (Setting.Mode == 'prompt') { tempBox.find('.AlertBoxDivPromptDOM:first').focus(); //判斷是否需要預設框選 if (Setting.Setting.Select == true) { tempBox.find('.AlertBoxDivPromptDOM:first').select(); } } else { tempBox.find('.AlertBoxDivCtrl button:last').focus(); } //顯示視窗 tempBox.animate({ opacity: 1 }, AlertBoxSetting.CoverSpeed, AlertBoxSetting.CoverTransition); tempBox.find('.AlertBoxDivContent').animate({ 'margin-top': '0px', 'margin-bottom': '0px' }, AlertBoxSetting.StartSpeed, AlertBoxSetting.StartTransition); //執行 OnRun 顯示時 執行函數 if (typeof (Setting.OnRun) == 'function') { Setting.OnRun(Setting.Code); } //執行 OnReady 顯示後 執行函數 (依照動畫時間延遲執行) if (typeof (Setting.OnReady) == 'function') { $('body').delay(AlertBoxSetting.StartSpeed).show(1, function () { Setting.OnReady(Setting.Code); }); } //綁定觸控、點擊操作事件 if (Setting.TouchClose == true) { if (navigator.userAgent.toLowerCase().match(/(android|iphone|ipad|ipod);?/i)) { //手機、平板用觸控 tempBox.on('touchstart', '.AlertBoxDivContent', function (event) { //關閉觸發click event.stopPropagation(); }); tempBox.on('touchstart', function (event) { //執行關閉 alertClose('cancel', Setting.Code, 'click'); }); } else { //電腦用點擊 tempBox.on('click', '.AlertBoxDivContent', function (event) { //關閉觸發click event.stopPropagation(); }); tempBox.on('click', function (event) { //執行關閉 alertClose('cancel', Setting.Code, 'click'); }); } } //console.dir(Setting) }; //關閉視窗 alertClose = function (Type, Code, Operating) { //如果沒有 Code 碼就尋找最後一個容器的 Code 碼 Code = Code ? Code : $(".AlertBoxDiv:last").attr('dom-code'); //宣告容器變數 var tempBox = $(".AlertBoxDiv[dom-code='" + Code + "']"); //判斷變數是否還存在 if (!AlertBoxTempData[Code]) { return; } //判斷是否需要無效化 (progress、loading模式使用) if ((AlertBoxTempData[Code].Mode == 'progress' || AlertBoxTempData[Code].Mode == 'loading') && (Operating == 'esc' || Operating == 'click')) { return; } //判斷若為 prompt 模式時 取得輸入的值 var tempValue = ''; if (AlertBoxTempData[Code].Mode == 'prompt') { tempValue = $(".AlertBoxDiv[dom-code='" + Code + "']").find('.AlertBoxDivPromptDOM').val(); //判斷是否必填 if (AlertBoxTempData[Code].Setting.Required == true && tempValue == '' && Type == 'ok') { alertBox({ Html: '請勿輸入空白!', OnEnd: function () { tempBox.find('.AlertBoxDivPromptDOM:first').focus(); }, }); return; } } //依照不同模式執行函數 if (AlertBoxTempData[Code].Mode == 'alert' || AlertBoxTempData[Code].Mode == 'progress' || AlertBoxTempData[Code].Mode == 'loading') { // alert 及 progress 及 loading if (typeof (AlertBoxTempData[Code].OnClose) == 'function' && Type) { var tempOnClose = AlertBoxTempData[Code].OnClose(Type, tempValue); if (tempOnClose == false) { return; } } } else if (AlertBoxTempData[Code].Mode == 'confirm' || AlertBoxTempData[Code].Mode == 'prompt') { // confirm 及 prompt if (typeof (AlertBoxTempData[Code].OnClose) == 'function' && (Type == 'ok' || Type == 'cancel')) { var tempOnClose = AlertBoxTempData[Code].OnClose(Type, tempValue); if (tempOnClose == false) { return; } } } //關閉視窗 tempBox.animate({ opacity: 0 }, AlertBoxSetting.CoverSpeed, AlertBoxSetting.CoverTransition); tempBox.find('.AlertBoxDivContent').animate({ 'margin-top': '20px', 'margin-bottom': '-20px' }, AlertBoxSetting.EndSpeed, AlertBoxSetting.EndTransition, function () { //依照不同模式執行函數 if (AlertBoxTempData[Code].Mode == 'alert') { // alert if (typeof (AlertBoxTempData[Code].OnOK) == 'function' && Type) { AlertBoxTempData[Code].OnOK(tempValue); } if (typeof (AlertBoxTempData[Code].OnCancel) == 'function' && Type) { AlertBoxTempData[Code].OnCancel(); } if (typeof (AlertBoxTempData[Code].OnEnd) == 'function' && Type) { AlertBoxTempData[Code].OnEnd(); } } else if (AlertBoxTempData[Code].Mode == 'confirm' || AlertBoxTempData[Code].Mode == 'prompt') { // confirm 及 prompt if (typeof (AlertBoxTempData[Code].OnOK) == 'function' && Type == 'ok') { AlertBoxTempData[Code].OnOK(tempValue); } if (typeof (AlertBoxTempData[Code].OnCancel) == 'function' && Type == 'cancel') { AlertBoxTempData[Code].OnCancel(); } if (typeof (AlertBoxTempData[Code].OnEnd) == 'function' && (Type == 'ok' || Type == 'cancel')) { AlertBoxTempData[Code].OnEnd(); } } else if (AlertBoxTempData[Code].Mode == 'progress' || AlertBoxTempData[Code].Mode == 'loading') { // progress 及 loading if (typeof (AlertBoxTempData[Code].OnOK) == 'function' && Type) { AlertBoxTempData[Code].OnOK(tempValue); } if (typeof (AlertBoxTempData[Code].OnCancel) == 'function' && Type) { AlertBoxTempData[Code].OnCancel(); } if (typeof (AlertBoxTempData[Code].OnEnd) == 'function' && Type) { AlertBoxTempData[Code].OnEnd(); } } //判斷是物件還是字串模式 if (AlertBoxTempData[Code].ID != null) { //將資料放回前端dom物件上 $(AlertBoxTempData[Code].ID).append(AlertBoxTempData[Code].Html); } //關閉滾動禁用 alertBoxDisabledEnd(); //移除視窗物件 tempBox.remove(); //移除變數 delete AlertBoxTempData[Code]; }); }; //改變進度條資訊 (progress模式專用) alertProgress = function (Percent, Html, AutoClose) { //轉為數字 Percent = parseInt(Percent); //尋找最後一個容器的 Code 碼 Code = $(".AlertBoxDiv:last").attr('dom-code'); //宣告容器變數 var tempBox = $(".AlertBoxDiv[dom-code='" + Code + "']"); //判斷變數是否還存在 if (!AlertBoxTempData[Code]) { return; } //改變Html內容 if (Html) { tempBox.find('.AlertBoxDivHtml .AlertBoxDivHtmlText').html(Html); } //賦予預設開啟使用自動關閉 if (AutoClose == undefined) { AutoClose = true; } //判斷百分比是否大於100 if (Percent >= 100 && AutoClose == true) { //改變進度為100 tempBox.find('.AlertBoxDivHtml .ProgressBar2').css('width', '100%'); tempBox.find('.AlertBoxDivHtml .ProgressBarWord').html('100%'); //延遲後關閉視窗 $('body').delay(AlertBoxTempData[Code].Setting.Delay).show(1, function () { alertClose('over', Code); }); } else { //改變進度 tempBox.find('.AlertBoxDivHtml .ProgressBar2').css('width', Percent + '%'); tempBox.find('.AlertBoxDivHtml .ProgressBarWord').html(Percent + '%'); } }; //改變內容資訊 (loading模式專用) alertLoadingMsg = function (Html, Code) { //如果沒有 Code 碼就尋找最後一個容器的 Code 碼 Code = Code ? Code : $(".AlertBoxDiv:last").attr('dom-code'); //宣告容器變數 var tempBox = $(".AlertBoxDiv[dom-code='" + Code + "']"); //判斷變數是否還存在 if (!AlertBoxTempData[Code]) { return; } //改變內容 tempBox.find('.AlertBoxDivHtml').html(Html); }; //關閉loading視窗 (loading模式專用) alertLoadingEnd = function (Html, Speed, CallBack, Code) { //如果沒有 Code 碼就尋找最後一個容器的 Code 碼 Code = Code ? Code : $(".AlertBoxDiv:last").attr('dom-code'); //宣告容器變數 var tempBox = $(".AlertBoxDiv[dom-code='" + Code + "']"); //判斷變數是否還存在 if (!AlertBoxTempData[Code]) { return; } //改變內容 if (Html != '' && Html != null && Html != undefined) { tempBox.find('.AlertBoxDivHtml').html(Html); } //套用延遲時間 var tempSpeed = Speed ? Speed : AlertBoxTempData[Code].Setting.Delay; //套用 callback 函數 if (typeof (CallBack) == 'function') { AlertBoxTempData[Code].OnEnd = CallBack; } //延遲後關閉視窗 $('body').delay(tempSpeed).show(1, function () { alertClose('over', Code); }); }; //滾動禁用開始 alertBoxDisabledStart = function () { if (AlertBoxSetting.ScrollType == 'overflow') { //遮罩 body 內容方式 $('body').css('overflow', 'hidden'); } else if (AlertBoxSetting.ScrollType == 'mousewheel') { //禁用滾動方式 (行動裝置不執行) //if (!navigator.userAgent.toLowerCase().match(/(android|iphone|ipad|ipod);?/i)) { //相加 html 與 body ,因應瀏覽器定義 scrollTop 的差異 AlertBoxBodyScrollValue = $('html').scrollTop() + $('body').scrollTop(); AlertBoxMouseWheelCheck = false; //} } //判斷是否使用失焦遮罩 開啟 if (AlertBoxSetting.FilterBlur == true) { $(AlertBoxSetting.FilterTarget).css('filter', 'blur(' + AlertBoxSetting.FilterBlurValue + 'px)'); } }; //滾動禁用結束 alertBoxDisabledEnd = function () { //場上所有視窗剩下最後一個時才開放 var TempNumber = 0; $('.AlertBoxDiv').each(function (index, element) { TempNumber++; }); if (TempNumber <= 1) { if (AlertBoxSetting.ScrollType == 'overflow') { //恢復 body 內容 $('body').css('overflow', 'visible'); } else if (AlertBoxSetting.ScrollType == 'mousewheel') { //開啟滾動使用 (行動裝置不執行) //if (!navigator.userAgent.toLowerCase().match(/(android|iphone|ipad|ipod);?/i)) { AlertBoxMouseWheelCheck = true; //} } //判斷是否使用失焦遮罩 關閉 if (AlertBoxSetting.FilterBlur == true) { $(AlertBoxSetting.FilterTarget).css('filter', 'initial'); } } }; //禁用滾動方式 專用監控 $(window).scroll(function () { if (AlertBoxMouseWheelCheck == false) { $('html,body').scrollTop(AlertBoxBodyScrollValue); } }); //判斷使否使用 ESC 關閉 $(document).on('keyup', 'body', function (event) { //判斷在視窗開啟的情況下才可以關閉 if (event.keyCode == 27 && AlertBoxSetting.EscClose == true) { if ($('.AlertBoxDiv').length > 0) { alertClose('cancel', null, 'esc'); } } }); ////點擊空白處關閉視窗判斷 //$(document).on('click', '.AlertBoxDivContent', function (event) { // if (AlertBoxSetting.TouchClose == true) { // //關閉觸發click // event.stopPropagation(); // } //}); //$(document).on('click', '.AlertBoxDiv', function (event) { // if (AlertBoxSetting.TouchClose == true) { // //執行關閉 // alertClose('cancel', null, 'click'); // } //}); //$(document).on('touchstart', '.AlertBoxDivContent', function (event) { // if (AlertBoxSetting.TouchClose == true) { // //關閉觸發click // event.stopPropagation(); // } //}); //$(document).on('touchstart', '.AlertBoxDiv', function (event) { // if (AlertBoxSetting.TouchClose == true) { // //執行關閉 // alertClose('cancel', null, 'click'); // } //}); //以下為相容舊版本函數 if (AlertBoxSetting.Compatible == true) { //alert alert_S = function (Html, OnEnd, Setting) { Setting = Setting ? Setting : { style: '' }; alertBox({ Mode: 'alert', Html: Html ? Html : '', //Title: '', OutsideStyle: Setting.style ? Setting.style : '', OnEnd: OnEnd ? OnEnd : null, }); }; //confirm confirm_S = function (Html, OnOK, OnCancel, Setting) { Setting = Setting ? Setting : { style: '', onStart: function () { }, onBeforeEnd: function () { return true; } }; alertBox({ Mode: 'confirm', Html: Html ? Html : '', //Title: '', OutsideStyle: Setting.style ? Setting.style : '', OnReady: Setting.onStart ? Setting.onStart : null, OnOK: OnOK ? OnOK : null, OnCancel: OnCancel ? OnCancel : null, OnClose: Setting.onBeforeEnd ? Setting.onBeforeEnd : null, }); }; //prompt (單一輸入) prompt_S = function (Html, OnOK, Setting, OnCancel) { Setting = Setting ? Setting : { style: '', value: '', placeholder: '輸入...', textarea: false, filter: '', select: false, required: true, }; alertBox({ Mode: 'prompt', Html: Html ? Html : '', //Title: '', OutsideStyle: Setting.style ? Setting.style : '', OnOK: OnOK ? OnOK : null, OnCancel: OnCancel ? OnCancel : null, Setting: { Mode: Setting.textarea == true ? 'textarea' : 'text', Value: Setting.value ? Setting.value : '', Placeholder: Setting.placeholder ? Setting.placeholder : '輸入...', Select: Setting.select ? Setting.select : false, Required: Setting.required === undefined ? true : Setting.required, }, OnReady: function (Code) { var tempFilter = Setting.filter ? Setting.filter : null; if (tempFilter != null) { $(".AlertBoxDiv[dom-code='" + Code + "']").find('.AlertBoxDivPromptDOM').attr('onkeyup', tempFilter); } }, }); }; //prompt (多筆輸入) --- 先跳過 //loading loading_S = function (Html, OnReady, Setting) { Setting = Setting ? Setting : { style: '' }; alertBox({ Mode: 'loading', Html: Html ? Html : '', Title: '', Ctrl: '', OutsideStyle: Setting.style ? Setting.style : '', OnReady: OnReady ? OnReady : null, }); }; loading_S_msg = function (Html) { $(".AlertBoxDiv:last").find('.AlertBoxDivHtml').html(Html); }; loading_S_end = function (Html, Speed, OnEnd) { alertLoadingEnd(Html, Speed, OnEnd); }; //wait --- 先跳過 //float float_S = function (Html, Setting, OnRun, OnEnd) { Setting = Setting ? Setting : { style: '', boxstyle: '', titlestyle: '', ctrlstyle: '', touchclose: false, titlehtml: '', ctrlhtml: '', }; alertBox({ Mode: 'alert', Html: Html ? Html : '', Title: Setting.titlehtml ? Setting.titlehtml : '', Ctrl: Setting.ctrlhtml ? Setting.ctrlhtml : '', OutsideStyle: Setting.style ? Setting.style : '', TitleStyle: Setting.titlestyle ? Setting.titlestyle : '', InsideStyle: Setting.boxstyle ? Setting.boxstyle : '', CtrlStyle: Setting.ctrlstyle ? Setting.ctrlstyle : '', TouchClose: Setting.touchclose === undefined ? false : Setting.touchclose, OnRun: OnRun ? OnRun : null, OnEnd: OnEnd ? OnEnd : null, }); }; float_S_end = function (Type) { if (Type == 'OnClose') { alertClose('over'); } else { alertClose(); } }; };