2013-10-09 56 views
0

編輯1不能調用未定義的方法'setData'

使用方法dataTransfer.setData使它工作!

http://jsfiddle.net/UH7Sf/1/

d3.event.dataTransfer.setData('type',type); 

我使用的方法面臨的一個問題,使用setData和的getData d3.event

我有在頂部有一個可拖動IMG元素的div和一些內在第二個下降功能。

d3.select('img').on('dragstart', function() { 
    var type = d3.select(this).attr('type'); 
    console.log("Drag starts with "+ type); 
d3.event.transfer.setData('type',type);  
}); 

d3.select('.drop').on('drop', function() { 
    d3.event.preventDefault(); 
    var type = d3.event.transfer.getData('type'); 
    console.log("Drag ends with "+ type);  
}); 

d3.select('.drop').on('dragover', function() { 
    d3.event.preventDefault(); 
}); 

這裏是小提琴:http://jsfiddle.net/UH7Sf/

還有另一種解決方案使用D3(拖動&壓降範圍內transfering數據)這樣做呢?

+1

我不清楚你想要做什麼。 'd3.event'沒有'transfer'成員。 –

+0

對不起,我需要使用dataTransfer不能傳輸! – Odward

+0

也沒有'dataTransfer'。你想做什麼? –

回答

0

event內部沒有任何物體,稱爲transfer。你可以做的一件事是嘗試event.setData(),但我不認爲這就是你想要的,因爲dragstart和drop事件是兩個不同的事件對象。

您可以改爲使用單獨的局部變量。例如。

var draggedType = null; 

d3.select('img').on('dragstart', function() { 
    var draggedType = d3.select(this).attr('type'); 
    console.log("Drag starts with "+ draggedType); 
}); 

d3.select('.drop').on('drop', function() { 
    d3.event.preventDefault(); 
    console.log("Drag ends with "+ draggedType); 
    // do something with draggedType here 

    draggedType = null; // reset draggedType to null when done, just in case 
}); 
+0

感謝您的幫助。我的問題是兩個d3.select()。on()需要在兩個不同的作用域中執行(使用一些角度指令)。 – Odward

+0

無論如何,問題解決了 – Odward

相關問題