javascript - 使用 React 单击另一个表复选框来选择表的所有复选框

标签 javascript reactjs html redux

我在表格中为每个td都有复选框。现在,我有另一张表,其中有一个复选框。检查此选项后,我想选择第一个表的所有其他复选框。

这是代码,

<tr key={key}>
    <td align="center"> <input type="checkbox" name="myTextEditBox" value="checked" /></td>
    <td>{item.technology}</td>
</tr>

对于我做的第二个表,

handleCheckBox = () => {
    console.log("callling the handle change");
    this.setState({
      isCheckd: !this.state.isCheckd
    })
}

constructure(props) {
    this.state = { isCheckd: false }
    <td className="text-right mr-1"><input type="checkbox" checked={this.state.isCheckd} onChange={this.handleCheckBox}  /></td>
}

现在,在此单击处理程序中可以正常工作。但是,现在如何在不使用 jquery 的情况下选择另一个表的所有其他复选框。

谁能帮我解决这个问题吗?

尝试过解决方案 -

state = { dynamicProp: {},  isCheckd: false,}

    handleCheckBox = () => {
        this.setState({
          isCheckd: !this.state.isCheckd
        }, () => {
          this.props.jobs.forEach((item) =>
            this.setState(prevState => ({
              dynamicProp: {
                ...prevState.dynamicProp,
                [item.jdName]: prevState.isCheckd
              }
            })
            ))
        });
      }

      handleTableCheckboxChange = (e) => {
        const target = e.target.name;
        const checked = e.target.checked;
        this.setState(prevState => ({
          dynamicProp: {
            ...prevState.dynamicProp,
            [target]: checked
          }
        }), () => {
          const result = this.allTrue(this.state.dynamicProp);
          this.setState({
            isCheckd: result ? false : true
          })
        })
      }



 allTrue(obj) {
    for (var o in obj)
      if (!obj[o]) return true;
    return false;
  }

然后将所有 props 传递给子元素。现在,我现在面临的问题是在handleTableCheckboxChange 方法中,我没有得到您使用过滤器获取未选中元素的方式。然后全选检查将被更改。

最佳答案

我不太理解你的代码,所以我从你写的内容中理解它。然后我为您创建了一个工作示例。希望对您有帮助!

UPDATED CODE

const Table=(props)=>(
   <table>
   {
      props.items.map((item, i) => (
        <tr key={i}>
           <td>
             <input type="checkbox"  checked={props.parentState[item.name]}  name={item.name} onChange={props.handleChange} />
           </td>
           <td>{item.value}</td>
        </tr>
      ))
   }
   </table>
);

class App extends React.Component {
    items = [
        {
            value: 'EN',
            name: 'field1'
        },
        {
            value: 'IT',
            name: 'field2',
        }
    ];

    state = {
        checkAll: false,
    };

    render() {
        return (
            <div>
                Check All
                <input type="checkbox" onChange={this.handleCheckAll} checked={this.state.checkAll}/>
                <Table
                   handleChange={this.handleChange}
                   items={this.items}
                   parentState={this.state}
                />
            </div>
        );
    }

    handleCheckAll = () => {
        this.setState({
            checkAll: !this.state.checkAll
        }, () => {
            this.items.forEach((item) => this.setState({ [item.name]: this.state.checkAll}))
      });
    }

    handleChange = (e) => {
        this.setState({
            [e.target.name]: e.target.checked
        }, () => {
             const uncheckedItems = this.items.filter((item) => !this.state[item.name])

             this.setState({
                  checkAll: uncheckedItems.length === 0?true:false
             });
            
        });
    }
}

ReactDOM.render(<App />, document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

<div id="root"></div>

关于javascript - 使用 React 单击另一个表复选框来选择表的所有复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55254435/

相关文章:

javascript - 如何创建单个输入处理程序

javascript - 重新绘制散点图,为特定值设置颜色?

javascript - 将状态传递到 Ajax 调用 ReactJS 和 Rails

javascript - 单击以显示更多内容 - 2 列

html - 附加带有显示内联 block 的 div,最后一个单词用于包装

javascript - 根据 URL 中的变量/键显示不同的图像

javascript - javascript 电子邮件混淆到底有多安全?

javascript - 如何迭代其变量名称取决于不同变量的数组

html - 如何在 CSS 布局中响应式地截断列?

javascript - 在 Rails 应用程序中使用 javascript 加载特定的 CSS 文件