ag-grid React Header组件选择所有复选框选项无法在移动设备和平板电脑上正常工作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ag-grid React Header组件选择所有复选框选项无法在移动设备和平板电脑上正常工作相关的知识,希望对你有一定的参考价值。

我正面临一个奇怪的问题,我正在实施Header组件使用ag-grid选择所有Checkbox选择。

它在桌面上按预期工作,但当我在平板电脑或移动设备上测试相同的功能时,复选框选择随机工作。

我的意思是当我点击内部复选框时它没有被检查但是当我点击一些复选框的左边界处时它正在被选中。

到目前为止我尝试的事情:

  • 尝试改变onClick以及onChange也没有运气。
  • 试过按钮而不是复选框,但仍然是同样的问题。
  • 尝试将输入复选框直接放在return语句中但是相同 问题。

以下是相同的代码:

列defs:

this.setState({
      terminalAllocationsColumnDefs: [
        {headerName:"",field:"status", width:150, cellRendererFramework: CheckBoxRenderer, headerComponentFramework : HeaderCheckBoxRenderer,HeaderChangeCallback:this.headerChangeCallback},
        {headerName: this.state.multiLangMsgs.TERMINAL_ID, field: "DId", width: 250},
        {headerName: this.state.multiLangMsgs.TERMINAL_TYPE, field: "DType", width: 250},
        {headerName: this.state.multiLangMsgs.MSISDN, field:"MsId", width:260},
        {headerName: this.state.multiLangMsgs.SIM_ID, field:"SimId", width:260},
        {headerName: this.state.multiLangMsgs.SATALITE_ID, field:"DKey", width:250}
      ]
    });

HeaderCheckBoxRenderer组件:

onCheckBoxChange(){
        this.selectAll = false;
        if(this.state.checkStatus == "inactive"){
            this.setState({
                checkStatus :"active"
            });
            this.selectAll = true;
        }else {
            this.setState({
                checkStatus: "inactive"
            });
        }
        // }console.clear();
        // console.log(this);
            try{
                if(this.props.column.colDef.HeaderChangeCallback){
                    this.props.column.colDef.HeaderChangeCallback(this.selectAll);
                }
            }catch(e){}
    }
    render() {
        return (
            <div class="ag-header-cell" style={{"padding":"4px 4px 4px 5px"}}>
                <div class="ag-header-cell-resize"/>
                <div class="ag-header-select-all"/>
                <div class="ag-header-component"/>
                <input id="checkboxMember" type="checkbox" onClick={this.onCheckBoxChange.bind(this)} className="check" checked={this.state.checkStatus == "active" ? true : false}/>
            </div>
        );
    }

桌面

enter image description here

片剂

enter image description here

正如您在桌面上看到的那样,它正在按预期工作,但在平板电脑上,当我点击靠近左边框的地方时,它正在工作。

任何人都可以帮我解决这个奇怪的问题。

提前致谢。

答案

我终于得到了这个问题并且能够解决这个问题。

问题:

一些如何在用户单击标题复选框时,列拖动开始获取也会被触发,因此覆盖或抑制复选框的单击事件。

解:

由于这是一个根据我的客户需要的复选框列,用户无需重新定位它因此抑制列移动(suppressMovable: true)为我解决问题,如下所示:

this.setState({
      terminalAllocationsColumnDefs: [
        {headerName:"",field:"status", width:150, cellRendererFramework: CheckBoxRenderer, headerComponentFramework : HeaderCheckBoxRenderer,HeaderChangeCallback:this.headerChangeCallback, suppressMovable: true},
        {headerName: this.state.multiLangMsgs.TERMINAL_ID, field: "DId", width: 250},
        {headerName: this.state.multiLangMsgs.TERMINAL_TYPE, field: "DType", width: 250},
        {headerName: this.state.multiLangMsgs.MSISDN, field:"MsId", width:260},
        {headerName: this.state.multiLangMsgs.SIM_ID, field:"SimId", width:260},
        {headerName: this.state.multiLangMsgs.SATALITE_ID, field:"DKey", width:250}
      ]
    });

如果有人有相同问题的其他解决方案,请告诉我。

谢谢。

以上是关于ag-grid React Header组件选择所有复选框选项无法在移动设备和平板电脑上正常工作的主要内容,如果未能解决你的问题,请参考以下文章

使用 React 加载新表后使用新数据更新 ag-grid

Ag-grid 全宽行似乎不适用于 React 组件

如何在 React 函数组件(useState 挂钩)中访问 ag-Grid API?

AG-Grid React,无法在数据更改时更新自定义单元格渲染器。函数组件的行为与类组件不同

如何在我的 ag-grid 单元格中放置一个 react jsx 组件

无法使用 Typescript 中的 React 钩子在 Ag-Grid 中获取 gridApi