如何使嵌套元素在可拖动容器中不可拖动?
How can I make a nested element not draggable in a draggable container?
我在父容器上使用 HTML5 拖放,但我想禁用其某些子容器的拖动效果,特别是输入,以便用户可以 select/edit 输入内容容易地。
示例:
https://jsfiddle.net/Luzub54b/
<div class="parent" draggable="true">
<input class="child" type="text" value="22.99"/>
</div>
Safari 似乎默认为输入执行此操作,因此请在 Chrome 或 Firefox 上试试。
我一直在寻找类似的东西,并找到了使用 mousedown 和 mouseup 事件的可能解决方案。这不是最优雅的解决方案,但它是唯一一个在 chrome 和 firefox 上都对我有效的解决方案。
我在你的 fiddle 中添加了一些 javascript:
Fiddle
;
(function($) {
// DOM Ready
$(function() {
$('input').on('mousedown', function(e) {
e.stopPropagation();
$('div.parent').attr('draggable', false);
});
$(window).on('mouseup', function(e) {
$('div.parent').attr('draggable', true);
});
/**
* Added the dragstart event handler cause
* firefox wouldn't show the effects otherwise
**/
$('div.parent').on({
'dragstart': function(e) {
e.stopPropagation();
var dt = e.originalEvent.dataTransfer;
if (dt) {
dt.effectAllowed = 'move';
dt.setData('text/html', '');
}
}
});
});
}(jQuery));
我在父容器上使用 HTML5 拖放,但我想禁用其某些子容器的拖动效果,特别是输入,以便用户可以 select/edit 输入内容容易地。
示例: https://jsfiddle.net/Luzub54b/
<div class="parent" draggable="true">
<input class="child" type="text" value="22.99"/>
</div>
Safari 似乎默认为输入执行此操作,因此请在 Chrome 或 Firefox 上试试。
我一直在寻找类似的东西,并找到了使用 mousedown 和 mouseup 事件的可能解决方案。这不是最优雅的解决方案,但它是唯一一个在 chrome 和 firefox 上都对我有效的解决方案。
我在你的 fiddle 中添加了一些 javascript: Fiddle
;
(function($) {
// DOM Ready
$(function() {
$('input').on('mousedown', function(e) {
e.stopPropagation();
$('div.parent').attr('draggable', false);
});
$(window).on('mouseup', function(e) {
$('div.parent').attr('draggable', true);
});
/**
* Added the dragstart event handler cause
* firefox wouldn't show the effects otherwise
**/
$('div.parent').on({
'dragstart': function(e) {
e.stopPropagation();
var dt = e.originalEvent.dataTransfer;
if (dt) {
dt.effectAllowed = 'move';
dt.setData('text/html', '');
}
}
});
});
}(jQuery));