4

I am trying to set the checked prop of a checkbox using a state, updated code with handleChange function:

getInitialState: function() {
    return {
        selected:0,
        contactId: 0
    };
},

handleChange: function(e) {
    var id = this.state.contactId;

    console.log(e.target.checked);

    if (e.target.checked === true){

        console.log('selected');

        contactChannel.publish({
                    channel: "contact",
                    topic: "selectedContact",
                    data: {
                        id: [id]
                    }});

    } else{

        basketChannel.publish({
            channel: "basket",
            topic: "removePersonFromBasket",
            data: {
                id: [id]
            }
        });


        console.log('deselected flag');


    }
},
render: function() {

    var id = this.state.contactId;
    var isSelected = this.state.selected;

    console.log(isSelected);

    return (
        <div className="contact-selector">
            <input type="checkbox"
                   checked={isSelected}
                onChange={this.handleChange} />
        </div>
    );
}

However, once the checkbox is checked by default I cannot uncheck it, can anyone please tell me how to do this?

Many thanks

1
  • Can you add the handleChange function? Commented Aug 6, 2015 at 8:00

3 Answers 3

5

In the handleChange function you are always using the same value for the state of the check box but you need to reverse it.

add this to your handleChange function:

handleChange:function(event){
    this.setState({selected: !this.state.selected}); //look at the !NOT sign

}
Sign up to request clarification or add additional context in comments.

Comments

0

The problem is because you return with the wrong variable. Changing {isSelected} with {this.state.selected} should work.

getInitialState: function() {
    return {
        selected:0,
        contactId: 0
    };
},


render: function() {

    var id = this.state.contactId;
    var isSelected = this.state.selected;

    console.log(isSelected);

    return (
        <div className="contact-selector">
            <input type="checkbox"
                   checked={this.state.selected}
                onChange={this.handleChange} />
        </div>
    );
}

3 Comments

And why is that? They have the same value.
Changed to checked={this.state.selected}, and still cannot uncheck, any ideas?
I am sorry, I tried... I'm from another world than ReactJS and the recomputation is done only on the returned string... Hence why the isSelected would have always same value...
-1
getInitialState: function() {
    return {
        selected:0,
        contactId: 0
    };
},

handleChange:function(event){
    this.setState({selected: !this.state.selected});
    isSelected = this.state.selected;

    console.log(isSelected);
}

render: function() {

    var id = this.state.contactId;
    var isSelected = this.state.selected;

    console.log(isSelected);

    return (
        <div className="contact-selector">
            <input type="checkbox"
                   checked={isSelected}
                onChange={this.handleChange} />
        </div>
    );
}

1 Comment

That will just keep on having the same value again.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.