2014-02-17 51 views
3

我想在D3中創建一個文本輸入控件,需要將數據推送到文本輸入中。我能夠與如何使用d3更新文本輸入的內容?

d3.selectAll('#textfield') 
    .data([number]) 
    .attr('value', function(d) { return d }) 

設置的初始值,但這是沒有用的,一旦有人編輯文本,然後嘗試外部更新。有什麼方法可以將內容設置爲任意值?我有the code in JsFiddle

更新:

我發現一個workaround

var node = d3.selectAll('#textfield') 
    .data([number]) 
    .node() 
node.value = number 

但我不知道這是正確的做法。任何線索?

+0

這聽起來很棒! :) –

+0

我沒有用SVG標記它,因爲我沒有在我的代碼中使用SVG。這是純HTML。 – hanbzu

+0

我做了徽章:) –

回答

2

設置value屬性的值和value恰好是不與setAttribute函數(d3內部使用,用於設置一個屬性),很好地發揮特殊的屬性。

這種方法也好不了多少,但更務實的使用D3

d3.selectAll('#textfield') 
    .data([number]) 
    .each(function (d) { 
     this.value = d; 
    }); 

演示:http://jsfiddle.net/LGtDD/3/


此外,人們可以(或許應該)使用純JS來除非你有強烈的反對意見,否則不要這樣做。使用D3這可能只是矯枉過正:

document.getElementById('textfield').value = number; 
+0

我在更一般的上下文中使用D3。這只是我想做的事情的失敗部分:)感謝您的答案! – hanbzu

0

這似乎也是作品:

function changeValue() { 
    var number = Math.round(Math.random()*100); 
    d3.select('#textfield')[0][0].value = number; 
} 
相關問題