2015-02-10 4 views
2

У меня есть массив var brands = ['Option1', 'Option2']. Я хочу использовать D3 для вывода помечены радиокнопок следующим образом:D3: как создать элементы ввода, за которыми следует текст ярлыка?

<label> 
    <input type="radio" name="brand" value="Option1" checked="true"/> Option1 
</label> 
<label> 
    <input type="radio" name="brand" value="Option2" /> Option2 
</label> 

Это мой D3, но это не совсем рабочая:

var radios = d3.select('.panel.left').selectAll('input[name="brand"]').data(brands); 
var labels = radios.enter() 
     .append("label") 
     .attr("for", function(d) { return d; }) 
     .text(function(d) { return d; }) 
     .append("input") 
     .attr("type", "radio") 
     .attr("name", "brand") 
     .attr("value", function(d) { return d; }) 
     .attr('checked', function(d) { if (d === brands[0]) { return 'checked' }; }); 
d3.selectAll('input[name="brand"]').on('change', function() { 
    renderValues(this.value); 
}); 

Это очень близко к работе, но он выдает это:

<label> 
    Option1 <input type="radio" name="brand" value="Option1" checked="true" /> 
</label> 
<label> 
    Option2 <input type="radio" name="brand" value="Option2" /> 
</label> 

Независимо от того, что я делаю, я не могу понять, как разместить текст после элемента <input>. Что я должен делать по-другому?

Было бы неплохо, если бы мне не пришлось повторно выбирать элементы ввода, чтобы добавить слушателя в конце.

+0

Вы видели [это учебник] (http://www.d3noob.org/2014/04/using-html-inputs-with-d3js .html)? –

+0

Спасибо, но если я чего-то не хватает, упорядочение всех элементов ввода и метки в этом учебнике уже жестко закодировано в HTML. Я заинтересован в создании их для динамического списка. – Richard

ответ

0

Попробуйте добавить это в конце сценария:

d3.selectAll("label") 
    .data(brands) 
    .append("text") 
    .text(function(d) { return d; }); 

И удалите эти строки:

.attr("for", function(d) { return d; }) 
.text(function(d) { return d; }) 

Вам не нужно повторно выбрать вход. После .append ("ввод") добавить слушателя:

.append("input") 
.on('change', function() { 
    renderValues(this.value); 
}) 
+0

Спасибо, что работает. Мне не нужно было повторно привязывать данные, я просто сделал «d3.selectAll (« label »). Append (« text »). Text (function (d) {return d;});'. Умело использовать текстовый элемент SVG. – Richard

Смежные вопросы