2016-01-04 18 views
1

我正在試驗拖動&拖放到Javascript中。到目前爲止,這是工作,但我的dragable對象中可編輯的內容都沒有可用的了(因此他們不正常的方式)拖放保持可編輯內容的行爲

這是一個dropable對象的例子:

<div id="ziel_2" draggable="true" trvdroptarget="true"> 
    <div> some text<br>some text</div> 
    <div contenteditable="true">some text</div> 
</div> 

整個對象不應該被拖動,如果我嘗試使用contenteditable div,我想單擊文本並編輯它或只是選擇一些文本昂只是拖動它就像正常

所以問題:我該如何取消拖動事件如果e.target.hasAttribute(「contenteditable」)ondragstart?

編輯:這是幕後到目前爲止的代碼:

function lieferungen_draggable_add_dragstart(obj) 
{ 
    obj.addEventListener('dragstart', function (e) { 
     if(e.target.hasAttribute("contenteditable")) { /* make something stop this thing */ } 
     e.dataTransfer.effectAllowed = 'move'; 
     e.dataTransfer.setData('Text', this.getAttribute('id')); 
     return false; 
    }); 
    return obj; 
} 

EDIT2:

contenteditableDiv.addEventListener('mousedown', function() { this.parentNode.setAttribute("draggable", false); }); 
contenteditableDiv.addEventListener('mouseup', function() { this.parentNode.setAttribute("draggable", true); }); 

這個工作對我來說基於一個想法從https://stackoverflow.com/a/9339176/4232410

感謝您的幫助!

+0

你可以給一個ID,CONTENTEDITABLE部分,然後結合可拖動事件時,排除/這些ID - 需要看到你的代碼真的添加了代碼 –

+0

,但我不知道如何排除可拖動元素中的特定元素 – mech

+0

剛發現http://stackoverflow.com/questions/6848140/how-do -i-prevent-drag-on-child-but-allow-drag-on-the-parent似乎是一個類似的問題,但沒有結果;( – mech

回答

0

試試這個:

if(e.target.hasAttribute("contenteditable")) { return false; } 

基本上,這是說出去,如果目標具有屬性不做別的:contenteditable

+0

試過這個之前,但似乎什麼都不做;( – mech

1

檢查元素的CONTENTEDITABLE狀態和任何父元素(見the docs關於屬性信息)

for (var el = e.target; el && el !== el.parentNode; el = el.parentNode) { 
    if (el.contentEditable === "true") { 
     return false; 
    } 
} 
// Continue processing here 
+0

你也可以檢查「假」並提前休息 - 但這提供了基本的想法;-) – Rycochet

+0

剛發現,e.target一直返回外部div,而不是對象我用鼠標點擊...如何找出? – mech

+0

但即使我在dragstart的第一行返回false,沒有任何變化,對象仍然可以拖動;( – mech