2022年5月19日 星期四

[Javascript] jquery.table2excel 對 texarea中資料的處理

jquery.table2excel 這個js套件可以將簡易的table轉出excel,最近使用時發現table中的textarea 元素轉出後在excel會是個元件,而不是在儲存格中的純文字,有點困擾所以看了一下source code, 

發現裡面有對 input這個元素做處理,如法泡製一下,正規表示式-抓取html中 textarea中的資料,另外因textarea會有換行的問題,所以再將換行符號取代為 <br />,不過如果沒有加上style的話,excel開啟後對<br />的解譯會新增一列,所以再加上mso-data-placement:same-cell;後便可保持在同一個儲存格上囉~


    function exclude_textareas(string) {

        var _patt = /(<textarea [^>]*>(.*[\n]*.*)<\/textarea>)/i;

        return string.replace(/<textarea [^>]*>.*[\n]*.*<\/textarea>/ig, function myFunction(x) {

            var res = _patt.exec(x);

            if (res !== null && res.length >= 2) {

                return res[2].replace('\n', '<br style="mso-data-placement:same-cell;" />');

            } else {

                return "";

            }

        });

    }


/<

2022年5月16日 星期一

[Javasccript]easyui $.messager.progress Esc鍵問題

當使用 $.messager.progress() 這個功能時,我直覺的用法是用在讓使用者知道目前正在處理資料中,請用戶等待處理完畢

不過發現當啟 progress視窗開啟時,只要用戶按Esc鍵,這個視窗就會關閉.....這個可不是我想要,正常不應該讓使用者隨意去取消關閉視窗。

要解決這個問題可使用 $.extend 去把 $.messager.defaults 覆寫(overrid)  onBeforeClose的功能

 (這個onBeforeClose是繼承自 easyui 的 panel )

參考語法如下:

$.extend($.messager.defaults, {

onBeforeClose: function(){

        if($(this).find('.messager-progress').length > 0 )

            if( event && event.type == "keydown" && event.keyCode == 27 ) return false;

    }

});