Table中针对某个字段进行更新关于保存按钮

31 阅读1分钟

需求:展示一个订单列表,有一个字段“备注”可以进行文本域内的更新。 相关代码如下

存在的问题:点击“保存”按钮不能正常触发,但“取消”按钮可以正常触发

问题原因:在于 el-input@blur事件与 “保存” 按钮的点击事件存在冲突

关键原因:el-inputblur事件先于 “保存” 按钮点击事件触发

  1. 事件执行顺序问题:当点击 “保存” 按钮时,鼠标从el-input移开,会先触发el-input@blur事件,执行handleCancelEdit函数,导致row.isEditing被设为false,编辑状态被关闭。此时 “保存” 按钮所在的div.notes-editv-else条件(row.isEditingfalse)被销毁,按钮元素从 DOM 中移除,点击事件自然无法触发。
  2. 对比 “取消” 按钮:“取消” 按钮的点击事件会直接执行handleCancelEdit,虽然同样会关闭编辑状态,但事件触发时按钮仍在 DOM 中,因此能正常执行。而 “保存” 按钮的点击被blur事件抢先中断,导致事件丢失。

验证与复现

  • el-input处于聚焦状态时,快速点击 “保存” 按钮,会观察到:输入框先失焦(触发blurhandleCancelEdit→关闭编辑状态),按钮消失,点击事件无效。
  • 若先点击页面其他区域让输入框失焦(编辑状态已关闭),再点击 “保存” 按钮(此时按钮已消失),更明显无法触发。

解决方案:延迟blur事件的执行,优先响应按钮点击

通过setTimeout延迟handleCancelEdit的执行,给 “保存” 按钮的点击事件留出触发时间

解决代码如下: