Dans le cadre d'un projet plus vaste, j'ai cette fonction
var setupSelections = function() {
var form, labels, all, i;
form = d3.select("#sample_names")
.append("form");
// Draw the labels
labels = form.selectAll("label")
.data(Names)
.enter()
.append("label")
.text(function(d) {return d;})
.insert("input")
.attr({
type: "checkbox",
id: "CB_LABELS",
class: "checkbox",
name: function(d, i) {return i;},
value: function(d, i) {return i;}
})
.property("checked", function(d, i) {
if (i == 0) return 1
if (i > 0) return 0
});
// Add event listeners
all = document.getElementsByClassName('checkbox');
for (i = 0; i < all.length; i++) {
all[i].addEventListener("change", updateSampleBOOL)
}
} // End of setupSelections
Dans d3 v3, ce code dessine une série d'étiquettes Names
avec une case à cocher à côté (à droite de l'étiquette). Dans la version d3 v4, les étiquettes sont présentes mais les cases à cocher se transforment en champs de texte, et bien sûr la partie concernant "coché" échoue puisqu'on ne peut pas définir un champ de texte comme "coché". Je pense que cela doit être lié aux changements décrits. aquí :
En 3.x, selection.append ajoutait toujours le nouvel élément en tant que dernier enfant de son parent. Une astuce peu connue consistait à utiliser selection.insert sans spécifier de sélecteur before lors de la saisie de nœuds, ce qui entraînait l'insertion des nœuds saisis avant l'élément suivant dans la sélection mise à jour. Dans la version 4.0, c'est désormais le comportement par défaut de selection.append ; si vous ne spécifiez pas de sélecteur before à selection.insert, l'élément inséré est ajouté en tant que dernier enfant.
Mais je ne comprends pas vraiment comment l'utiliser pour corriger mon code (si c'est bien là le problème).