Internet explorer React currentTarget.selectedOptions[0]。在onChange事件之后,IE 10中的值失败

Internet explorer React currentTarget.selectedOptions[0]。在onChange事件之后,IE 10中的值失败,internet-explorer,reactjs,Internet Explorer,Reactjs,JSFiddle: 下面的代码是我在IE10上使用JSX的React 12.2应用程序中遇到的问题的简化版本。具体来说,这条线 var postData=rsvp.currentTarget.selectedOptions[0]。值 在IE中失败。它在Chrome和Firefox中工作。首先,为什么这在IE10中失败,其次,我如何调整代码使其工作 var Hello = React.createClass({ getInitialState: function() { r

JSFiddle:

下面的代码是我在IE10上使用JSX的React 12.2应用程序中遇到的问题的简化版本。具体来说,这条线

var postData=rsvp.currentTarget.selectedOptions[0]。值

在IE中失败。它在Chrome和Firefox中工作。首先,为什么这在IE10中失败,其次,我如何调整代码使其工作

var Hello = React.createClass({
    getInitialState: function() {
        return {parsed: false};
    },
    _onRSVP: function(rsvp) {
        console.log(rsvp);
        var postData = rsvp.currentTarget.selectedOptions[0].value;
        this.setState({parsed: true});
        alert(postData);
    },
    render: function() {
        var parsing = "parsing worked";
        return (
        <div>
        <select            
            onChange={this._onRSVP}>
            <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'));
更改此行,var postData=rsvp.currentTarget.selectedOptions[0]。值;致:

演示:

编辑:通常,您可以使用它来获取本机DOM事件的目标:

function getTarget(e) {
    var targ;

    if (!e) {
        e = window.event;
    }

    if (e.target) {
        targ = e.target;
    } else if (e.srcElement) {
        targ = e.srcElement;
    }

    if (targ.nodeType == 3) { // defeat Safari bug
        targ = targ.parentNode;
    }

    return targ;
}
然后您也可以更改上面的行:

var postData = getTarget(rsvp.nativeEvent).value;
更改此行,var postData=rsvp.currentTarget.selectedOptions[0]。值;致:

演示:

编辑:通常,您可以使用它来获取本机DOM事件的目标:

function getTarget(e) {
    var targ;

    if (!e) {
        e = window.event;
    }

    if (e.target) {
        targ = e.target;
    } else if (e.srcElement) {
        targ = e.srcElement;
    }

    if (targ.nodeType == 3) { // defeat Safari bug
        targ = targ.parentNode;
    }

    return targ;
}
然后您也可以更改上面的行:

var postData = getTarget(rsvp.nativeEvent).value;

您可以将其简化为jsbin/jsfiddle吗?我怀疑有很多代码与问题无关。@WiredPairie只是减少了不少行。关键在于底部的render函数,其余的都是没有被调用的东西,所以我把它们去掉,重点放在重要的东西上。问题是,据我所知,我不能在这两个服务上编写JSX或使用React 12.2。我不能用一个简单的例子来重复这个问题:。虽然我只有IE11在IE9模拟模式下运行。@WiredPairie感谢您的帮助!上了调试课,并适当地更新了问题。现在这个解决方案有什么意义吗?你能把它简化成jsbin/JSFIDLE吗?我怀疑有很多代码与问题无关。@WiredPairie只是减少了不少行。关键在于底部的render函数,其余的都是没有被调用的东西,所以我把它们去掉,重点放在重要的东西上。问题是,据我所知,我不能在这两个服务上编写JSX或使用React 12.2。我不能用一个简单的例子来重复这个问题:。虽然我只有IE11在IE9模拟模式下运行。@WiredPairie感谢您的帮助!上了调试课,并适当地更新了问题。现在有什么办法吗?谢谢!有一个问题-我寻找了其他方法,发现这一个-仅使用event.target.value两者似乎都有效-您的建议更适合跨浏览器性能吗?event是React,SynteticEvent的特定类型,我认为React的作者关注跨平台性能,所以我会说不。这两种方式都应该在所有现代浏览器(包括IE9+)中实现相同的功能。谢谢!有一个问题-我寻找了其他方法,发现这一个-仅使用event.target.value两者似乎都有效-您的建议更适合跨浏览器性能吗?event是React,SynteticEvent的特定类型,我认为React的作者关注跨平台性能,所以我会说不。这两种方法都应该在所有现代浏览器(包括IE9+)中使用相同的功能。