在React中使用多个选项从检索值》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点</p>

8个回答
逆天泡芙神无 2020.03.16

实际上,您可以selectedOptions在目标内部找到对象...无需遍历所有选项。假设您想将值发送给onChange作为道具传递给组件函数:您可以在onChange多选对象的上使用以下函数

onSelectChange = (e) => {
    const values = [...e.target.selectedOptions].map(opt => opt.value);
    this.props.onChange(values);
  };
泡芙小胖 2020.03.16

另一种方法是:

handleChange({ target }) {
    this.props.someCallback(
       Array.prototype.slice.call(target.selectedOptions).map(o => o.value)
    )
}
老丝Tom前端 2020.03.16

使用Array.from()e.target.selectedOptions可以执行受控的选择倍数:

handleChange = (e) => {
  let value = Array.from(e.target.selectedOptions, option => option.value);
  this.setState({values: value});
}

target.selectedOptions返回一个HTMLCollection

https://codepen.io/papawa/pen/XExeZY

小宇宙樱 2020.03.16

如果您想使用ref,可以选择如下所示的值:

var select = React.findDOMNode(this.refs.selectRef); 
var values = [].filter.call(select.options, function (o) {
      return o.selected;
    }).map(function (o) {
      return o.value;
    });

2018 ES6更新

  let select = this.refs.selectRef;
  let values = [].filter.call(select.options, o => o.selected).map(o => o.value);
JimJim 2020.03.16

最简单的方法

handleChange(evt) {
  this.setState({multiValue: [...evt.target.selectedOptions].map(o => o.value)}); 
}
卡卡西Near 2020.03.16

以下为我工作

var selectBoxObj = React.findDOMNode(this.refs.selectBox)
var values = $(selectBoxObj).val()
JimJim 2020.03.16

因为您将真实的DOM节点用作更改事件的目标,所以您在其他任何地方都可以使用相同的方法:

handleChange: function(e) {
  var options = e.target.options;
  var value = [];
  for (var i = 0, l = options.length; i < l; i++) {
    if (options[i].selected) {
      value.push(options[i].value);
    }
  }
  this.props.someCallback(value);
}
小卤蛋小卤蛋 2020.03.16

在这种情况下,您希望在填写表格时跟踪所选的选项:

handleChange(e) {
    // assuming you initialized the default state to hold selected values
    this.setState({
        selected:[].slice.call(e.target.selectedOptions).map(o => {
            return o.value;
        });
    });
}

selectedOptions是与DOM相关的元素的数组形式的集合/列表。选择选项值时,可以在事件目标对象中访问它。Array.prototype.slicecall允许我们为新状态创建它的副本。您也可以使用ref(如果您不捕获事件)以这种方式访问​​值,这是该问题的另一个答案。

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android