前言
最近同事詢問一個 Web 控制項 在 Form 上面的 Client Click 是沒問題的,但是把它放到了 DataGrid 之中,它就沒有作用。
研究
使用 Browser 開發者工具(F12),去查看,並在 JS 的 event 中寫入 alert 程式碼,當按下那個 Web 控制項 時,程式並沒有順利跑進那個 click 的 event handler 之中。
於是往上查看發現,因為在 TR 有一個 onmousedown 事件處理,裡面寫著 onmousedown = “javascript:this.click()”,就把 Click 事件給吃掉了,難怪沒有進去那個 click event handler 之中。 透過 F12 把那個 onmousedown 屬性設定移除, Web 控制項 就可以順利運作了。
即然找到了問題,再來當然是將那個 onmousedown 屬性從 DataGrid 中的設定移除它,本來想再詢問為何當初會有這樣子的程式碼呢? 它的用意是什麼呢? 當初寫的人已不知去向了。
建議從元件或是那支程式去調整,因為有將那個 Web 控制項放進去的只有 2 支程式,而開發團隊也不敢去調整元件,所以就往改那 2 支程式去做。
所以就建議同事在 PreRender 時,將那個 DataGridItem.Attributes 裡面的 onmousedown 移除。
但同事反應不管寫在那裡都移不掉,我連進去看,程式有順利呼叫 Attributes.Remove(“onmousedown”),但那個 onmousedown 卻還 Render 出去。
1 | 'v10_tbA10_dgMaster 是 datagrid |
想說不可能呀!
於是將那些 Key 值印出來才發現,那個「onmousedown 」後面多了一個空白,難怪怎麼移都移不掉。
後來將程式改成如下,就順利解掉了。
1 | 'v10_tbA10_dgMaster 是 datagrid |
程式呀~~ 真的是什麼都有可能發生 Q_Q
希望大家在解問題時,多些細心、耐心,一起努力 :)