【问题标题】:What is the proper way to get the value of a React <select> element?获取 React <select> 元素值的正确方法是什么?
【发布时间】:2015-06-16 15:56:06
【问题描述】:

假设我有以下 React 元素 (example fiddle here):

var Hello = React.createClass({
    getInitialState: function() {
        return {parsed: false};
    },
    _parseEvent: function(event) {
        var parser1 = event.currentTarget.selectedOptions[0].value;
        var parser2 = event.target.value;
        var parser3 = event.nativeEvent.srcElement.value;
        if (parser1 && parser2 && parser3)
            this.setState({parsed: true});
    },
    render: function() {
        var parsing = "parsing worked";
        return (
        <div>
        <select            
            onChange={this._parseEvent}>
            <option value="----">----</option>
            <option value="Yes">Yes</option>
            <option value="No">No</option>
        </select>
        <p>
        { this.state.parsed ?
        {parsing}
        : null}
        </p>
        </div>
        );
    }
});

React.render(<Hello name="World" />, document.getElementById('container'));

我使用三种方法来解析&lt;select&gt; 元素的值。第一个不适用于 IE 10,我知道这是每个 my question here 的错误。然而,在其他两种方式中,parser2parser3,哪一种是在 React 中获取 &lt;select&gt; 元素值的正确方法?为什么?感谢您的帮助!

【问题讨论】:

    标签: javascript internet-explorer reactjs html-select internet-explorer-10


    【解决方案1】:

    使用您将在兼容 W3C 的浏览器中使用的内容:

    event.target.value
    

    这也与表单控制元素的类型无关。

    【讨论】:

    • @Felix_Kling 谢谢!您能否扩展 W3C 兼容浏览器的含义?我正在谷歌搜索“W3C
    • W3C 是创建 Web 技术标准的组织,例如 CSSHTMLDOM。 W3C 兼容仅仅意味着浏览器完全实现了标准(值得注意的是,旧的 IE 版本没有,但 React 会处理)。
    【解决方案2】:

    虽然其他答案工作得很好,但如果您正在寻找一种 React 方式,那么这可以通过使用 refs 来完成。

    为选择分配一个引用:

    <select onChange={this._parseEvent} ref="select">
        <option value="----">----</option>
        <option value="Yes">Yes</option>
        <option value="No">No</option>
    /select>
    

    通过 ref 获取 DOM 节点:

    var node = React.findDOMNode(this.refs.select)
    

    通过 DOM 节点获取值:

    var value = node.value;
    

    这是一个更新的小提琴来演示:https://jsfiddle.net/ve88383c/4/

    【讨论】:

    • 我不会以反应方式调用输入的 refs。
    • @FakeRainBrigand 使用 React 提供的实用程序有很多方法可以做到这一点。 Refs 只是其中一种方式。虽然它可能不是 the 反应方式,但它是 a 反应方式。我用那个语法改变更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    相关资源
    最近更新 更多