【发布时间】:2014-05-22 05:35:06
【问题描述】:
我编写了一个脚本,它根据用户输入的数字 (k) 创建多个字段。
我最初编写了一个脚本来创建正确数量的字段。但是我想在屏幕上像矢量一样排列它们,所以我修改了我的脚本。
我想要下面的脚本来创建正确数量的字段并将它们放在 DIVS 中,这样我就可以在页面上按照我的意愿布置它们。
由于这样做,脚本现在会生成重复的 DIVS,因为如果它在循环中运行了两次,但我终其一生都无法弄清楚为什么...
function createFields(k)
{
k=k+1
for (var n=1; n<k; n++) {
var makeBox=document.createElement("div");
makeBox.id = "box" + n;
document.getElementById("top").appendChild(makeBox);
document.getElementById("box" + n).setAttribute('class',"box");
var addOpen=document.createElement("div");
addOpen.id = "open"+n;
document.getElementById("box" + n ).appendChild(addOpen);
document.getElementById("open" + n).setAttribute('class',"open");
var vectorBox=document.createElement("div");
vectorBox.id = "vector" + n;
document.getElementById("box" + n).appendChild(vectorBox);
document.getElementById("vector" + n).setAttribute('class',"vect");
var xVector=document.createElement("div");
xVector.id = "top" + n;
document.getElementById("vector" + n).appendChild(xVector);
document.getElementById("top" + n).setAttribute('class',"xVect");
var newx=document.createElement("input");
newx.id = "x" + n;
document.getElementById("top" + n).appendChild(newx);
document.getElementById("x" + n).setAttribute('name',"x" + n);
document.getElementById("x" + n).setAttribute('type',"text");
document.getElementById("x" + n).setAttribute('size',"4");
document.getElementById("x" + n).setAttribute('maxlength',"4");
var yVector=document.createElement("div");
yVector.id = "bottom" + n;
yVector.class = "yVect";
document.getElementById("vector" + n).appendChild(yVector);
document.getElementById("bottom" + n).setAttribute('class',"yVect");
var newy=document.createElement("input");
newy.id = "y" + n;
document.getElementById("bottom" + n).appendChild(newy);
document.getElementById("y" + n).setAttribute('name',"y" + n);
document.getElementById("y" + n).setAttribute('type',"text");
document.getElementById("y" + n).setAttribute('size',"4");
document.getElementById("y" + n).setAttribute('maxlength',"4");
var addClose=document.createElement("div");
addClose.id = "close"+n;
document.getElementById("box" + n ).appendChild(addClose);
document.getElementById("close" + n).setAttribute('class',"close");
}
}
有什么线索吗?
更新:
代码通过另一个函数调用:
function getVectors()
{
v = document.getElementById("vectorN").value;
v=parseInt(v); //turn the text into an integer
document.getElementById("q1").innerHTML="Enter your Vectors below!";
createFields(v);
document.getElementById("enter").innerHTML="<input type=\"button\" id=\"button\" value=\"Submit Numbers\" onclick=\"canvas()\"/>";
}
在html中被onchange调用:
<p id="q1">How many Vectors will you need?
<input id="vectorN" name="vectorN" type="text" onChange="getVectors()" size="4" maxlength="4">
</p>
进一步更新
检查console.log后, 调用 createFields() 的唯一地方是 getVectors() 函数。它似乎确实调用了 createFields 两次(尽管在脚本中只调用了一次)。 调用 getVectors() 的唯一地方是输入字段中的 onChange 事件。 当我更改 innerHTML 并删除输入字段时,是否有可能将其注册为 onChange 事件并再次调用该函数?
【问题讨论】:
-
@Ismail Pure javascript 更快
-
@Ismail:无需借助大型 DOM 库即可轻松消除代码中显示的冗长。
-
我不知道。我正在从字段中获取输入以在 HTML 5 画布上绘制。要在画布上绘图,我需要一个 javascript(来自今天的 W3C 学校。)你知道为什么要经历两次循环吗?
-
createFields()是如何调用的? -
@Maffster 检查我的答案。我猜你要调用这个函数两次。
标签: javascript html css