Angular中jqxGrid图标按钮点击无响应问题求助
Angular jqxGrid图标按钮点击无响应问题解决
问题根源
当设置columnType: 'button'时,jqxGrid的buttonClick事件绑定在默认生成的按钮DOM元素上。你通过cellsRenderer返回<i>图标标签替换默认文本后,点击图标时事件无法正确冒泡到按钮元素,导致buttonClick不触发;而返回文本时,点击文本会直接触发按钮的绑定事件,因此能正常工作。
可行解决方案
方案1:保留按钮列类型,修复事件冒泡
利用cellsRenderer的defaulthtml参数(默认按钮的HTML结构),将图标插入到按钮内部而非完全替换原有结构:
{ text: '', datafield: 'Delete', width: 33, columnType: 'button', cellsRenderer: (row: number, column: any, value: any, defaulthtml: string, columnproperties: any, rowdata: any) => { // 将图标追加到默认按钮内部 return defaulthtml.replace('</button>', '<i class="fa fa-trash deleteButton"></i></button>'); }, buttonClick: (row: number): void => { console.log("*********"); this.deleteRow(row); } }
这种方式保留了jqxGrid原生的按钮事件绑定,点击图标时事件会自然冒泡到按钮,触发buttonClick逻辑。
方案2:改用普通列,手动绑定点击逻辑
放弃columnType: 'button',将列设为普通类型,在cellsRenderer中直接给图标添加点击事件:
{ text: '', datafield: 'Delete', width: 33, cellsRenderer: (row: number, column: any, value: any, defaulthtml: string, columnproperties: any, rowdata: any) => { return `<i class="fa fa-trash deleteButton" onclick="window.gridComponent.deleteRow(${row})"></i>`; } }
同时在组件类中暴露实例到全局(确保onclick能访问到组件方法):
ngOnInit(): void { (window as any).gridComponent = this; }
方案3:通过全局单元格点击事件处理
利用jqxGrid的cellclick事件,判断点击目标是否为删除图标,再执行对应逻辑:
// 在jqxGrid的配置中添加cellclick事件 cellclick: (row: number, column: any, event: MouseEvent) => { if ((event.target as HTMLElement).classList.contains('deleteButton')) { this.deleteRow(row); console.log("*********"); } }
这种方式无需修改列类型,只要cellsRenderer返回图标即可,通过全局事件监听实现点击响应。
内容的提问来源于stack exchange,提问作者sonu2007
相关产品推荐
相关产品推荐

