Two-way binding with checkboxes always returns "on" Two-way binding with checkboxes always returns "on" reactjs reactjs

Two-way binding with checkboxes always returns "on"


The "value" property on a checkbox is fixed, in the old days it was the value that was submitted along with the form only if the checkbox was checked.

The quick fix is this instead:

valueLink.requestChange(e.target.checked);

The valueLink only works when it is the value of the input that changes. Turns out that to link to the checked property, the checkedLink needs to be used instead:

render: function () {    return React.DOM.div(null, [        React.DOM.input({            type: 'checkbox',            checkedLink: this.linkState('value'),        }),        React.DOM.span(null, "state: " + this.state.value)    ]);}

Seems a shame that the valueLink can't be used for both!


One simple solution using state:

  constructor(props) { // list of objects    super(props);    this.state = {      is_checked: false    };  }  toggleCheckbox(event) {    let newValue = (this.state.is_checked === "on" || this.state.is_checked === true) ? false : true;    this.setState({      is_checked: newValue    });  }  render() {    return (      <div>        <input type="checkbox" checked={this.state.is_checked}          onChange={this.toggleCheckbox.bind(this)}        />      </div>    );  }