我一直在考虑这段代码试图解决这个问题,但我没有运气。这个问题是我想为参数boxId赋值。当我点击网页上的一个框时,会出现一个显示该ID的提醒。我尝试过很多东西,但似乎没什么用。我是初学者,所以我觉得在这一点上必须有一些我不知道该怎么做的东西。
构造函数:
function Box (boxId, name, color, number, coordinates) {
this.boxId = boxId;
this.name = name;
this.color = color;
this.number = number;
this.coordinates = coordinates;
}
全局变量:
var boxes = [];
var counter = 0;
var boxId = 0;
init函数:
window.onload = init;
function init() {
var generateButton = document.getElementById("generateButton");
generateButton.onclick = getBoxValues;
var clearButton = document.getElementById("clearButton");
clearButton.onclick = clear;
}
获取值并创建新框的功能:
function getBoxValues() {
var nameInput = document.getElementById("name");
var name = nameInput.value;
var numbersArray = dataForm.elements.amount;
for (var i = 0; i < numbersArray.length; i++) {
if (numbersArray[i].checked) {
number = numbersArray[i].value;
}
}
var colorSelect = document.getElementById("color");
var colorOption = colorSelect.options[colorSelect.selectedIndex];
var color = colorOption.value;
if (name == null || name == "") {
alert("Please enter a name for your box");
return;
}
else {
var newbox = new Box(boxId, name, color, number, "coordinates");
boxes.push(newbox);
counter++;
var boxId = counter;
}
addBox(newbox);
var data = document.getElementById("dataForm");
data.reset();
}
向页面添加框的功能:
function addBox(newbox) {
for (var i = 0; i < newbox.number; i++) {
var scene = document.getElementById("scene");
var div = document.createElement("div");
div.className += " " + "box";
div.innerHTML += newbox.name;
div.style.backgroundColor = newbox.color;
var x = Math.floor(Math.random() * (scene.offsetWidth-101));
var y = Math.floor(Math.random() * (scene.offsetHeight-101));
div.style.left = x + "px";
div.style.top = y + "px";
scene.appendChild(div);
div.onclick = display;
}
}
单击框时显示警告的功能:
function display(e) {
var a = e.target;
alert(a.counter);
}
清除框的功能:
function clear() {
var elems = document.getElementsByClassName("box");
for ( k = elems.length - 1; k >= 0; k--) {
var parent = elems[k].parentNode;
parent.removeChild(elems[k]);
}
}
所有其他功能都可以正常工作。当我点击它时,我继续遇到显示为“未定义”的ID,或者在控制台日志中显示“0”的计数器,我尝试过的所有内容。
答案 0 :(得分:1)
你可以这样做。
首先,在addBox()中嵌入boxId作为标记的属性,如下所示:
div.setAttribute('data-boxId', newbox.boxId);
然后在display()中你可以找回它:
alert(e.target.getAttribute('data-boxId'));
请告诉您是否不喜欢这种方法,我会发布一个替代方案(封闭的东西)。
编辑:添加jsfiddle示例http://jsfiddle.net/runtarm/8FJpU/
答案 1 :(得分:0)
再试一次。也许如果你改变:
var boxId = counter;
到
boxId = counter;
然后它将使用外部范围中的boxId而不是函数getBoxValues()
中定义的boxId