JavaScript/D3:在点击时创建浮动文本框,并从文本框输入更新图形
JavaScript/D3: Create floating textbox on click and update graph from textbox input
我正在尝试使用D3绘制多个交互线。当单击每一行时,应该根据当前鼠标坐标显示一个浮动文本框,并等待输入来更新行坐标。一旦文本框被更改,行应该自动更新,文本框应该消失。有人能看一下我的代码并找出哪里出了问题吗?谢谢!
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="http://d3js.org/d3.v3.min.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
</head>
<body>
<div id="d3_line"></div>
<script>
var svg = d3.select("#d3_line").append("svg")
.attr("width", 800)
.attr("height", 800);
line1 = {
"x1": 100,
"y1": 50,
"x2": 750,
"y2": 500
};
line2 = {
"x1": 100,
"y1": 200,
"x2": 750,
"y2": 650
};
data = [];
data.push(line1);
data.push(line2);
for (var i = 0; i < data.length; i++) {
var line = d3.select("svg")
.append("svg:line")
.attr("id", ("line" + i))
.attr("x1", data[i].x1)
.attr("y1", data[i].y1)
.attr("x2", data[i].x2)
.attr("y2", data[i].y2)
.style("stroke", "black")
.style("stroke-width", 6)
.on("click", function (d) {
var lineTextbox = $("svg").append("div").attr("id", "lineTextbox").style("left", (d3.event.pageX - 20) + "px").style("top", (d3.event.pageY - 40) + "px");
lineTextbox.html("new x1: <input type='text' id=new_x1></input>");
d3.select("#line" + i).on("change", function () {
this.attr("x1", $("#lineTextbox").val());
$("#lineTextbox").remove();
});
});
}
</script>
</body>
</html>
正如@FernOfTheAndes指出的那样,这个想法实际上是将一个外部对象附加到svg
,而不是将输入元素附加到html
属性。
var svg = d3.select("#d3_line").append("svg")
.attr("width", 800)
.attr("height", 800);
line1 = {
"x1": 100,
"y1": 50,
"x2": 750,
"y2": 500
};
line2 = {
"x1": 100,
"y1": 200,
"x2": 750,
"y2": 650
};
var data = [];
data.push(line1);
data.push(line2);
var lineID = "";
function update() {
d3.select("#" + lineID).attr("x1", $("#new_x1").val());
$("#new_x1").remove();
}
for (var i = 0; i < data.length; i++) {
var line = d3.select("svg")
.append("svg:line")
.attr("id", ("line" + i))
.attr("x1", data[i].x1)
.attr("y1", data[i].y1)
.attr("x2", data[i].x2)
.attr("y2", data[i].y2)
.style("stroke", "black")
.style("stroke-width", 6)
.on("click", function () {
$(".externalObject").remove();
lineID = d3.select(this).attr("id");
svg.append("foreignObject")
.attr("class", "externalObject")
.attr("x", (d3.event.pageX - 20) + "px")
.attr("y", (d3.event.pageY - 40) + "px")
.attr("width", 200)
.attr("height", 100)
.append("xhtml:div")
.html("<input type='text' id=new_x1 placeholder='input new x1 here' onchange=update()></input>");
});
}
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script src="https://d3js.org/d3.v4.min.js"></script>
<div id="d3_line"></div>
相关文章:
- 如何使用jquery在填充自动完成的值后使文本框只读
- 使用Clipboard.js复制span文本
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 用程序搜索JQuery数据表中的文本
- jQuery匹配JSON对象的部分文本
- onkeyup无法动态创建多个文本区域
- 如何在下面的ES6循环中获得前面的文本
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- 让文本输入幻灯片显示输入时的新文本输入?然后向后滑动
- 借助asp.net验证或java脚本对多个文本进行验证
- 无法在ajaxStart中更改跨度文本
- 将字体文本转换为呈现的图形位图
- 如何在图形上的 x 轴标签文本后面添加元素
- html 我需要用图形代替 vcr 控件的文本来控制数据库中的状态
- 如何添加文本到可缩放冰柱d3图形
- rapha 235;l:尝试将半动画文本添加到旋转器图形中
- JavaScript/D3:在点击时创建浮动文本框,并从文本框输入更新图形
- 如何更改d3js图形中图例的文本颜色
- 如何使d3js图形上的文本与图形一起缩放
- 在Highcharts图形中动态定位文本和圆圈