javascript - react : get custom checkbox's checked attribute

标签 javascript checkbox reactjs

我想用复选框进行一些自定义,它看起来像这样:

enter image description here

所以我将我的自定义复选框包装到 React 组件中:

require('../../less/ck-checkbox.less');
var React = require('react');

var CkCheckbox = React.createClass({
  propTypes: {
    name: React.PropTypes.string,
    text: React.PropTypes.string,
    defaultChecked: React.PropTypes.bool,
    onChange: React.PropTypes.func
  },
  getDefaultProps: function() {
    return {
      name: 'checkbox',
      text: '',
      defaultChecked: false,
      onChange: function () {}
    };
  },
  render: function() {
    return (
      <div className="ck-checkbox">
        <label>
          <input
            type="checkbox"
            name={this.props.name}
            ref="c"
            defaultChecked={this.props.defaultChecked}
            onChange={this.props.onChange.bind(this, this.refs.c.checked)}
          />
            <span className="icons">
              <span className="icon-checked-o icon-true"></span>
              <span className="icon-circle-o icon-false"></span>
            </span>
            {this.props.text.length > 0 ?
              <span className="ck-checkbox-text">{this.props.text}</span> : null
            }
          </label>
        </div>
      );
    }
});

module.exports = CkCheckbox;

我的容器是这样的:

var React = require('react');

var CkCheckbox = require('./CkCheckbox.js');

var Test = React.createClass({
  render: function() {
    return (
      <div>
        <CkCheckbox onChange={this._handleChange}/>
      </div>
    );
  },

  _handleChange: function(checked, e) {
    console.log(checked)
  }
});

module.exports = Test;

你可以看到,我尝试在onChange回调中绑定(bind)this.refs.c.checked,但是没有成功。

那么,如何在 _handleChange 函数的测试组件中获取自定义复选框的选中状态

最佳答案

在这种情况下,您不需要使用 refs,因为您可以从 e 参数中获取已检查的属性

// CkCheckbox component
 <input type="checkbox" 
     name={this.props.name} 
     defaultChecked={this.props.defaultChecked} 
     onChange={ this.props.onChange } />

// Test component
_handleChange: function(e) {
  var checked = e.target.checked;
  console.log(checked)
}

Example

或者如果你只想传递 checked 属性,你可以这样做

// CkCheckbox component
handleChange: function (e) {
  this.props.onChange(e.target.checked);
},

<input type="checkbox" 
   name={this.props.name} 
   defaultChecked={this.props.defaultChecked} 
   onChange={ this.handleChange } />

// in Test component 
_handleChange: function(checked) {
  console.log(checked)
}

Example

关于javascript - react : get custom checkbox's checked attribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34563062/

相关文章:

JavaScript/jQuery : Is there a better way to acomplish this in Javascript?

reactjs - webpack 从域访问时主机 header 无效,而不是通过 IP 访问时

javascript - 在 js 中使用时,django 模板中未定义 Ordereddict

javascript - AngularFire - 如何使用 ng-repeat 定义子模板的项目 ID?

java - 支持 JavaScript 的 Java 轻量级代码编辑器小部件

java - 如何在jsp中根据可用性创建复选框?

html - Bootstrap 内联复选框 - 如何将它们向左或向右拉到表单中?

javascript - 从数组 Angular js中删除未经检查的值

javascript - 为什么会出现 SyntaxError : Assigning to rvalue?

reactjs - 我应该使用 redux-form 存储而不是组件状态和 Redux 自定义存储吗?