jQuery namespaced event

Posted on January 8th, 2018


在處理 jQuery Mobile 時,因為是手機介面,所以常常需要透過綁定 scroll 事件來處理各種狀況,

一般通常是 scroll to HIDE 或 scroll to LOAD&SHOW

但某些情況有可能會導致重複綁定的問題,所以需要透過 namesapced 的 event 來解決,避免兩個相同的事件(但處理不同情況)互相干擾

例如:

某些頁面要在 scroll 時把元素 A 和 B 都隱藏:


$(document).on('scroll', function (event) {
//TODO: determine the length of scrollTop to hide element A
}

$(document).on('scroll', function (event) {
}

但有時候元素 A 和 B 的事件都是 global 使用的, 但其中某些頁面不處理 B:

$(document).on('scroll', function (event) {
//TODO: determine the length of scrollTop to hide element A
}

$(document).off('scroll');

當 off('bind') 時就會把 A 和 B 的 handler 都刪除了





所以必須引用 namespaced


$(document).on('scroll.typeA', function (event) {
//TODO: determine the length of scrollTop to hide element A
}

$(document).on('scroll.typeB', function (event) {
//TODO: determine the length of scrollTop to hide element B
}

這樣就可以單獨 off 一個元素不影響其他 handler 的綁定

$(document).off('scroll.typeA');

$(document).off('scroll.typeB');



btw. 可以透過 jquery 去檢查目前事件有哪些 handler


$._data(document, 'events');

// 例如:可以把 document 中 scroll 事件的 handler 都印出來

$._data(document, 'events').scroll.forEach(function(elem) {
console.log ( elem.handler.toString());
});




參考 api:

iOS 滑動卡卡不順暢 scroll inside scroll

Posted on November 10th, 2017

當 overflow scroll 的區塊中有其他 overflow 是 scroll 時, iOS 裝置的滑動會卡卡的,沒有硬體的慣性滑動效果

嘗試在內層的 scroll 元件 css 加上 -webkit-overflow-scrolling: touch

透過輸入法組字事件 CompositionEvent 解決 iOS 上可能無法觸發 GoogleMap Autocomplete

Posted on September 13th, 2017


透過輸入法組字事件 CompositionEvent 解決 iOS 可能無法正確觸發 GoogleMap Autocomplete
// hack: 讓 iOS 鍵盤拼完字會跳出 google map 的 autocomplete
$(pacInput).on('compositionend', function() {
$(this).trigger('blur').trigger('focus');
});




相關事件:
  1. compositionstart : 輸入法組字開始
  2. compositionend : 輸入法組字結束
  3. compositionupdate: 輸入法修改字詞

[1] 參考 MDN: https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent


jqueryMobile 下載檔案注意事項

Posted on June 26th, 2017

jQuery Mobile 下載一般檔案 data-ajax="false"

```
```

M版 Spring MVC 排程設定

Posted on June 26th, 2017


M版 Spring MVC 排程設定



public class UpdatexxxxxTask {

@Scheduled(fixedDelay = 30000)
public void execute() {
try {
dosomething
} catch (Exception e) {
ApLog.error(e.getMessage(), e);
}
}
}

1.新增一個 CLASS 和 METHOD 並利用 ANNOTATION 增加要執行的排程

a. @Scheduled(fixedDelay = 30000)
執行完才會執行下一次(ms)

b. @Scheduled(fixedRate=5000)
不管這次執行是否完成,時間到了即執行下一次

c. @Scheduled(cron="*/5 * * * * MON-FRI")
同b, cron 的排程時間到了立即執行

2.在 SPRING-QUARTZ.XML 增加 BEAN

參考: src/main/resources/spring/spring-quartz.xml

3.可能存在的問題:

目前沒有特別設定哪一台機器要跑, 應該 critical, master, slaves 都會執行.
未來 task 更多、或是有需要指定機器執行時,可能需要類似 web 版獨立設定。

apache mod_jk @ MacOS Worker 設定問題

Posted on March 14th, 2017

在 mod_jk 的 log 發現 localhost 無法解析等相關錯誤訊息

嘗試把 workers.properties 中連到 tomcat 的 IP(port 8009那個) 從 localhost 改為 127.0.0.1 後

就可以讓 Apache 的 mod_jk 和 tomcat 順利整合了


P.S. 猜測可能原因: tomcat listen 的 ip 只有 127.0.0.1 並不包含 localhost

macOS Sierra 10.12 安裝 apache mod_jk

Posted on February 16th, 2017

###如何在 macOS Sierra 10.12 正確安裝 apache mod_jk

##編譯 mod_jk.so


cd ~/Desktop/tomcat-connector-source/native

./configure CFLAGS='-arch x86_64' APXSLDFLAGS='-arch x86_64' --with-apxs=/usr/sbin/apxs

make

sudo make install

* 第一步的 configure 可能會遇到 apxs path not found 的問題, 解決方式:

用 homebrew 安裝 apache24: brew install apache

--with-apxs 指定到 homebrew 安裝的 apache 位址(太長忘了), 大概就能正確 configure 了

--with-apxs=/usr/local/Cellar/apache/apache24...

* 如果還有 apxs 的問題, 可以執行 apxs -q 看看有少什麼套件

將make 好的 mod_jk.so 搬到原本的(homebrew的) apache libexec 下

5) Copy created mod_jk.so:

cp /usr/libexec/apache2/mod_jk.so /Applications/Coldfusion10/config/wsconfig/1/mod_jk.so

btw. 如果要使用 brew 的 apache 記得更換symbolic link ln -s

參考:


struts1 中 DispatchAction 繼承 execute 執行順序

Posted on February 16th, 2017

地雷時間: 8小時(一個工作天) :(((

假設

StoreManageBaseAction extends DispatchAction


StoreManageIndexAction extends StoreManageBaseAction

當 execute 被執行時,
會優先執行父類別的 execute(), 才執行子類別指定的 method


例如:
要執行 StoreManageIndexAction.index(),
會先執行完 StoreManageBaseAction.execute() 才執行 StoreManageIndexAction.index()



PostgreSQL pgSQL 終止沒有回應的 Query

Posted on November 24th, 2016


由於對較大的 Table 執行 update SQL 可能因為網路環境等因素, 造成沒有回應,
所以不用 GUI 操作, 用 CLI 操作, 當然有時候還是會卡住, 結果即使用 psql.exe 還是每次都卡住...

問題可能是因為 網路?

C:\pgAdminIII\1.22\psql.exe -U ihergo -h 60.199.195.113 -d ihergo -a -f a.sql -L a.log

另外, 可以透過 SQL 來查詢目前正在執行的 Query

SELECT * FROM pg_stat_activity ;

可以看 datname, application_name, state=Idle 欄位值



查詢後, 如果遇到想要中止的 Query 可以:


SELECT pg_cancel_backend(pid); 或 SELECT pg_terminate_backend(pid); // like force

MSSQL varchar, nvarchar 預設長度 30

Posted on April 15th, 2016

MSSQL varchar, nvarchar 預設長度 30

nvarchar, varchar 不給長度時, 有預設 30 的限制

以後記得, 所有對資料庫欄位的 update, 都應該要備份, 以確保不會有慘劇發生…

  • 方法1: 新增一個備份用的欄位, 將值 copy 過去
  • 方法2: 直接對資料庫備份
2016/04/15 某案子得到的教訓…

Liu@llen

Notes from my experience.