ui給的界面上是在行內作刪除,好比有一列叫「操做」的列,裏面有個按鈕,點擊能夠刪除該列。只作前端刪除……
而後出現問題報錯:
`cannot read property 'xxx' of undefined`
經過斷點發現,這個錯是在onClickCell方法時返回的。大體代碼是這樣的,忽略參數,由於不一樣的行,不一樣的項目這裏是不同的
var row=opts.finder.getRow(xxx,yyy) ; //省略若干…… opts.onClickCell.call(xxx,yyy,row[xxx]);
錯誤就是最後一行報的,然而根源在第一行,row沒有正常獲取到,斷點發現,獲取到的是undefined,固然取row[xxx]是取不到的,要報錯。前端
那麼問題來了,我點了一下按鈕,爲何會觸發這個函數,查文檔發現,這個函數是點擊單元格的時候觸發的函數。問題顯而易見,其實就是點擊按鈕,事件冒泡到點擊單元格方法上。此方法被觸發的時候,該行已經被刪除,因此row爲undefined,從而致使這個問題。函數
解決問題就很簡單了吧,阻止事件冒泡便可,按鈕onclick上傳入event,而後事件中event.stopPropagation()便可解決。
網上找了一圈,沒看到靠譜的解決方式,什麼重載數據啥啥的都試過了,並無什麼卵用。因此伸手黨很差啊,仍是要本身調試解決問題。另外,《JavaScript高級程序設計》中關於"DOM事件流",說了三個階段。事件捕獲階段,處於目標階段和事件冒泡階段。一個事件的觸發,從DOM頂層即document開始一層一層的尋找觸發元素,這就是捕獲階段。ui
尋找到具體元素以後,就是處於目標階段,咱們的事件綁定的函數運行實際就是這個階段,而後這一步走完了以後,就會去冒泡,看看父元素,祖父乃至更高層元素會不會有一樣的事件觸發。須要注意的是,冒泡是在處於目標階段完成以後纔會進行。設計
回到咱們問題上來,就是咱們先把行給刪除了,而後冒泡到上層的函數纔去獲取行,固然是拿不到,從而致使錯誤發生。調試