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
寻找到具体元素以后,就是处于目标阶段,咱们的事件绑定的函数运行实际就是这个阶段,而后这一步走完了以后,就会去冒泡,看看父元素,祖父乃至更高层元素会不会有一样的事件触发。须要注意的是,冒泡是在处于目标阶段完成以后才会进行。设计
回到咱们问题上来,就是咱们先把行给删除了,而后冒泡到上层的函数才去获取行,固然是拿不到,从而致使错误发生。调试