2016-03-05 162 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事件的可能解決方案。這不是最優雅的解決方案,但它是唯一一個在Chrome和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

謝謝!這工作非常好。我對代碼[fiddle](https://jsfiddle.net/vh8cr2tg/4/)進行了一些小改動,以刪除窗口上的事件處理程序,但這更多的是個人偏好。 – zjabbari

相關問題