由 引發的思考

2022-07-19 16:54:23 字數 1207 閱讀 2647

前陣子在乙個移動專案中,通過 的方式 繫結click 事件來提交乙個表單,由於表單資訊比較敏感,於是採用的post 同步提交的方式,原本到也沒有什麼。後來萬惡的pm說 「你這個按鈕呀,要固定在底部比較好」 ,於是乎就通過 position:fixed 固定到底部了。那麼,問題來了 , 在ios 下,虛擬鍵盤是浮在頁面上層的,導致的結果是當鍵盤收起後,浮在最底部的按鈕不在最底下,而跑到中間來了,(極端條件下還可能擋住輸入框導致無法輸入),並且隨著螢幕的滾動而滾動,,(表現類似於absolute) ,,高大上的蘋果也是真心坑了一回。

怎麼辦呢? 兩種方案,一滾動時動態計算位置,實時監控位置必定是要消耗效能的,二是由於無法監控到虛擬鍵盤開啟或者關閉,所以只能通過對表單元素繫結focus和blur事件來改變按鈕position來達到想要的效果。於是balabala又搞完了。

搞完後就開始測試,然後有發現當有input元素處於focus狀態時,點選提交按鈕,無效!!!我再點,好了。。。

原因是因為blur事件會阻止click事件的執行。。。

好,我繼續改。

blur事件會阻止click事件的執行,但是不會阻止touch事件,於是想起把click改成tap吧。還真行。不用再點選兩次了。

大功告成,我得意的笑,我真聰明。

balabala 就上線了。

一上線發現提交不了了。。。有一定概率出現請求被canceled 。。。

各種google沒找出原因,,問題出在**?click是沒有問題,換成tap便有問題了,於是乎查了一下 touch event 的執行順序,大致是這樣

於是我測試 mouseup 是好的,touchend也是有問題的,,tap也是有問題的,,而當我用tap事件,handler處理的時候延遲100ms再$('*form').submit() 又可以正常提交了。原來是submit執行的時機問題。

繼續各種debug 抓蟲子,,歷史遺留的坑啊,,

最終到 了,,當按鈕點選事件執行,在請求hash前執行submit , 請求還沒返回,由於改變了hash,同步的submit被cancel了,,,而由於各種原因submit執行前,hash已經改變的話就可以順利提交了,,

於是乎,把 改成 終於萬事大吉了。

由XML Literal引發的思考

首先,什麼是xml literal呢?原來,這是在vb.net 9.0才引入的乙個用於構建xml物件的新特性,並且只有vb.net 9.0才支援。我們都知道,要建立xml樹,可以使用linq中的api,如下所示 出自vb.net 9.0 xml literal dim xml2 new xeleme...

由html,body引發的思考

預設情況下,html body 除ie6 是沒有高度,但body有margin 在上圖中ie8,ie9,chrome,ff一樣 當僅僅給body設定height 100 時 html未設定height 沒有什麼改變,除了ie6,因為ie6中html預設100 當給html,body都設定height...

由Web前端引發的思考

程式設計,以前真是有點誤解這個詞了,認為程式設計也就是用計算機進行編碼以實現人的需求。今天才明白,這是對程式設計狹義的理解。程式設計應該是通過用計算機去實現或者做到人做不到或者需要很多時間或精力做到的事,以提高社會的生產效率。而計算機並不知道怎樣去做,這還是需要人考慮的,我們把要做的事情分析分解,然...