Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/90.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 防止在父元素可拖动时拖动子元素_Javascript_Html_Reactjs_Events_Drag - Fatal编程技术网

Javascript 防止在父元素可拖动时拖动子元素

Javascript 防止在父元素可拖动时拖动子元素,javascript,html,reactjs,events,drag,Javascript,Html,Reactjs,Events,Drag,我有以下HTML(react)设置: {this.bound\u handleDragStart.call(this,e)} draggable=“true” > 这里的东西 此设置使整个外部分区可拖动 但是,如果拖动从输入开始,我希望它被取消 我尝试过向输入中添加onDragStart、向输入中添加eventListener并返回false、禁用句柄DragStart上的propogation以及许多其他功能,但都不起作用 作为not,whenevent.target返回外部div,因此我无

我有以下HTML(react)设置:

{this.bound\u handleDragStart.call(this,e)}
draggable=“true”
>
这里的东西
此设置使整个外部分区可拖动

但是,如果拖动从输入开始,我希望它被取消

我尝试过向输入中添加onDragStart、向输入中添加eventListener并返回false、禁用句柄DragStart上的propogation以及许多其他功能,但都不起作用

作为not,when
event.target
返回外部div,因此我无法找到一种方法来确定是哪个子级开始拖动

我相信这是可以做到的,也不会太难


我曾考虑过将拖动移动到所有内部div,但我不确定这是否会解决我的问题,或者创建一组全新的问题,而且我觉得这不是正确的方法,信不信由你,但实际上需要设置
draggable=“true”
,然后在运行
event.preventDefault()的输入上为
dragstart
添加事件处理程序:

{this.bound\u handleDragStart.call(this,e)}
draggable=“true”
>
这里的东西
e、 预防默认值()
}/>

这将阻止实际拖动,但父级上的
dragstart
事件仍将被触发,因为它会冒泡。如果您也想防止这种情况发生,还需要调用
事件。stopPropagation()

拖动将拖动子对象。怎么可能不呢?要检查从中拖动的子对象,这不是
target
提供给您的吗?但是如果拖动事件在子对象上启动,我希望取消拖动事件。正常情况下,取消默认值并防止传播应该可以做到这一点。
<div 
    onDragStart={
    (e) => { this.bound_handleDragStart.call(this, e) }}        
    draggable="true"
>
   <div>Stuff here</div>
   <div><input .../></div>
</div>
<div 
    onDragStart={
    (e) => { this.bound_handleDragStart.call(this, e) }}        
    draggable="true"
>
   <div>Stuff here</div>
   <div><input draggable="true" onDragStart={
     (e) => e.preventDefault()
   }/></div>
</div>