Javascript 如何防止onDragLeave在从容器移动到儿童时起火

Javascript 如何防止onDragLeave在从容器移动到儿童时起火,javascript,reactjs,Javascript,Reactjs,我在React中有当前的结构 var Component = React.createClass({ _testOver:function(){ console.log("Do action on hover"); }, _testOut: function(){ console.log("Do action on out"); }, render: function(){ return <div style={display:"none"}>

我在React中有当前的结构

var Component = React.createClass({
_testOver:function(){
    console.log("Do action on hover");
},
_testOut: function(){
    console.log("Do action on out");
},
render: function(){
    return <div style={display:"none"}>
               <div className="container"
                    onDragEnter={this._testOver}
                    onDragLeave={this._testOut}
                    style={{height:"400px",
                            paddingTop:"100px",
                            backgroundColor:"red"}}>
                    <div className= "child" style={{height:"200px",
                                 backgroundColor:"blue"}}>
                         TESTING
                    </div>
                </div>
           </div>
}
});
var Component=React.createClass({
_testOver:function(){
log(“悬停时执行操作”);
},
_testOut:function(){
console.log(“在输出时执行操作”);
},
render:function(){
返回
测试
}
});
将某物拖到容器上时,_testOver()事件将触发。但是,当继续拖动到子对象上时,_testOut()事件将启动,同时,另一个_testOver()将启动

我知道会发生这种情况,因为从技术上讲,鼠标会从容器中拖出并进入子对象(子对象仍在容器中,因此会触发另一个_testOver()事件)

我的问题是:当从父对象移动到子对象(或子对象的子对象)时,是否有方法阻止事件触发。i、 e._testOver只会在我们将任何东西拖到容器上时触发,而_testOut只会在我们将其拖出容器时触发_从容器移动到子容器时不应触发testOut


谢谢

我不确定这是否有效,但值得一试:

<div className= "child" onDragEnter={this.preventDrag} onDragLeave = {this.preventDrag} style={{height:"200px",
                             backgroundColor:"blue"}}>

preventDrag:function(e){
   e.preventDefault();
   e.stopPropagation();
}

防止拖动:功能(e){
e、 预防默认值();
e、 停止传播();
}
或者也许你能找到一份与州政府合作的工作?例如将布尔值切换为true或false,无论您是否将孩子悬停,在console.log找到答案之前测试此布尔值:)。最终,这更多的是一个javascript/jquery问题,而不是一个react问题。答案来自

为了让它与React一起工作,只需在componentDidMount中添加逻辑,这样我们就可以在呈现时将dragenter/dragleave附加到容器上

...
componentDidMount: function(){
    var thisComponent = this;
    var counter = 0;

    $(this.refs.container).bind({
        dragenter: function(ev) {
            ev.preventDefault(); // needed for IE
            counter++;
            thisComponent._testOver();
        },

        dragleave: function() {
            counter--;
            if (counter === 0) { 
                thisComponent._testOut();
            }
        }
    });
},
...

我找到了答案:)。请检查一下。谢谢如果没有jquery,那就太好了。