我尝试创建一个输入表单,该表单在单击节点时显示在d3定向力图中的节点上。用户输入的信息将更新节点的属性 - 例如名称将更改标题,角色是节点的颜色等。我设法使用一个输入来描述一个属性,使用以下内容功能:
function nodeForm(d) {
var p = this.parentNode;
var el = d3.select(this);
var p_el = d3.select(p);
var form = p_el.append("foreignObject");
var input = form
.attr("width", 300)
.attr("height", 100)
.attr("class", "input")
.append("xhtml:form")
.html(function(d) {return "<strong>Name:</strong>"})
.append("input")
.attr("value", function(d) {this.focus(); return d.name})
.attr("style", "width: 200px;")
.on("keypress", function() {
if (!d3.event)
d3.event = window.event;
//Prevents total update
var e = d3.event;
if (e.keyCode == 13){
if (typeof(e.cancelBubble) !== 'undefined') // IE
e.cancelBubble = true;
if (e.stopPropagation)
e.stopPropagation();
e.preventDefault();
var text = input.node().value;
d.name = text;
el.text(function(d) { return d.name; });
}
})
}
现在我无法添加其他输入。我希望可以在附加的html函数中添加一个输入框(如下所示),但它不会识别这些值,输入框 - 尽管它确实出现 - 不允许任何东西要输入。
.html(function(d) {return "<strong>Name:</strong> <input type = 'text' value = "d.name"> <br> <strong>Role:</strong> <input type = 'text' value = "d.role"> <br> <strong>Name:</strong> <input type = 'text' value = "d.tribe">"})
我对编程非常陌生,希望有人能指出我正确的方向。
我仍然无法使用弹出式输入框。使用各种方法(包括将它附加到节点组,使用.html附加它,调用html文件中的表单,包括它在mouseup函数中,使用工具提示等)和所有我设法得到相同的结果 - 我可以看到输入框但我无法编辑它们。我认为foreignObject正在工作,因为我可以在consol中看到它,但我似乎无法使其可编辑。我必须做一些根本错误的事情,我希望有人能指出我正确的方向。这是迄今为止完整代码的小提琴 - https://jsfiddle.net/VGerrard/91e7d5g9/2/
答案 0 :(得分:1)
你忘记在字符串和值之间添加+
,这可能会得到你想要做的事情
.html(function(d) {
return "<strong>Name:</strong> <input type = 'text'
value = " + d.name + "> <br> <strong>Role:</strong> <input type =
'text' value = " + d.role + "> <br> <strong>Name:</strong> <input type
= 'text' value = " + d.tribe + ">"
})