我需要帮助弄清楚如何将“div”的值传递给我正在处理的显示功能。这是我的代码。
//上面我有一个构造函数,我声明了“newbox”,我也得到了我的盒子的值 //在页面上显示框并使其值正常工作
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;
//console.log("added");
}
return div;
}
//函数使字符串传递给下一个函数
function makeString(name,color) {
var aString = "name" + "color";
return aString;
}
//显示在单击框时应显示警告的功能。
function display(e) {
var a = e.target;
var string = makeString(a.name, a.color);
a.onclick = alert(string);
}
到目前为止,当我点击一个框时,我得到了字符串“namecolor”。我想通过做“a.name”和“a.color”我可以从我点击的目标中获取这些值,但这显然不起作用。还尝试将div直接传递给display()函数,但我没有弄清楚如何正确地做到这一点。我是初学者,所以这可能是非常明显的,但是感谢帮助。
答案 0 :(得分:3)
这个方法没有意义,因为你在for循环中循环创建一定数量的div,但是你只返回一个?
function addBox(newbox) {
var i, div, scene = document.getElementById("scene");
for (i = 0; i < newbox.number; i++) {
div = document.createElement("div");
scene.appendChild(div);
div.onclick = display;
}
return div;
}
这样会更有意义:
function addBox() {
var i, div, scene = document.getElementById("scene");
div = document.createElement("div");
scene.appendChild(div);
div.onclick = display;
return div;
}
正如其他人所说,不要用引号括起你的变量,因为这意味着它们被视为字符串,而不是变量。
function makeString(name,color) {
var aString = "" + name + color;
return aString;
}
如果您希望保持string
的值可用,则必须为事件处理程序分配匿名函数,以便可以警告onclick
。只需分配警报方法的结果就意味着警报会立即发生而不是等待点击。
a.onclick = alert(string);
但是,这个display
方法仍然有点令人困惑,因为点击div时会触发display
。然后,您将分配另一个onclick
处理程序,该处理程序仅在下次单击div时触发。
function display(e) {
var a = e.target;
var string = makeString(a.name, a.color);
a.onclick = function(){
alert(string);
}
}
更有意义的是:
function display(e) {
var a = e.target;
var string = makeString(a.name, a.color);
alert(string);
}
此外,您的代码未提及在div元素上设置name
和color
的位置?你的意思是文本的颜色,背景的颜色或其他一些任意值?使用name
时,您的意思是.nodeName
还是其他类似于元素.name
属性的内容?
如果你想在div上使用任意属性,可以使用setAttribute
,所以在你创建它之后,分配你想要的值:
div = document.createElement("div");
div.setAttribute('name', 'this_is_my_name');
div.setAttribute('color', 'midnight blue');
然后使用getAttribute
检索它们:
var string = makeString(a.getAttribute('name'), a.getAttribute('color'));
或者正如其他人所说的那样,如果您希望获得div的当前文本颜色,请使用.currentStyle.color
和.getComputedStyle
- 但更容易通过{在div上专门定义颜色{1}}更容易以跨浏览器方式回读。
.style.color
然后回读:
div = document.createElement("div");
div.style.color = 'red';
答案 1 :(得分:1)
您的代码中存在一些问题。
首先,改变一下:
var string = makeString(a.name, a.color);
对此:
var string = makeString(a.innerHTML, a.currentStyle['color']);
然后,改变这个:
var aString = "name" + "color";
对此:
var aString = name + color;
这将为您提供DIV的内容和DIV上的当前颜色CSS属性。你的问题确切地说你要显示的内容有点不清楚。如果您可以澄清要从DIV显示的内容或使用HTML更新您的问题,我可以相应地调整我的答案。
答案 2 :(得分:1)
在没有引号的情况下将var aString = "name+"color"
更改为var aString = name+color
。
答案 3 :(得分:1)
尝试
function makeString(name,color) {
var aString = name+""+color;
return aString;
}