2016-03-05 11 views
2

Я использую перетаскивание HTML5 в родительском контейнере, но я хочу отключить эффект перетаскивания на некоторые из его дочерних элементов, в частности вход, чтобы пользователи могли легко выбирать/редактировать входной контент.Как сделать вложенный элемент не перетаскиваемым в перетаскиваемый контейнер?

Пример: https://jsfiddle.net/Luzub54b/

<div class="parent" draggable="true"> 
    <input class="child" type="text" value="22.99"/> 
</div> 

Safari, кажется, делает это для входов по умолчанию, поэтому попробовать его на Chrome или Firefox.

+0

Есть многочисленные перетаскиваемости библиотеки вокруг – charlietfl

+1

Это такая основная черты, что я чувствую, что это должно быть возможно с простым HTML и минимальной JavaScript. – zjabbari

+0

Несомненно ... если вы хотите иметь дело с такими проблемами с перекрестным браузером, которые уже были бы нормализованы и у вас есть опции в существующей библиотеке – charlietfl

ответ

2

Я искал что-то подобное и нашел возможное решение, используя события mousedown и mouseup. Это не самое элегантное решение, но это единственное, что работает для меня как на хроме, так и на firefox.

я добавил 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)); 
+0

Спасибо! это работало очень красиво. Я внес некоторые незначительные изменения в код [скрипт] (https://jsfiddle.net/vh8cr2tg/4/), чтобы удалить обработчик событий в окне, но это скорее личное предпочтение. – zjabbari