javascript - 将值传递给显示函数javascript

标签 javascript object parameters

我需要帮助弄清楚如何将“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() 函数,但我不知道如何正确地做到这一点。我是初学者,所以这可能非常明显,但不胜感激。

最佳答案

添加框

这个方法没有意义,因为你在一个 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;
}


生成字符串

正如其他人所说,不要将 var 括在引号中,因为这意味着它们将被视为字符串,而不是变量。

function makeString(name,color) {
  var aString = "" + name + color;
  return aString;
}


显示

如果您希望保持 string 的值可用,则必须将匿名函数分配给事件处理程序,以便它可以在 onclick 时收到警报。只需分配警报方法的结果就意味着警报将立即发生,而不是等待点击。

a.onclick = alert(string);

不过,这个display方法还是有点让人迷惑,因为display是在点击div的时候触发的。然后,您将分配另一个 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 元素上设置 namecolor 的位置?你是指文本的颜色、背景的颜色还是其他任意值?还有 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 - 但是会容易得多通过 .style.color 在 div 上专门定义颜色,这更容易以跨浏览器的方式回读。

div = document.createElement("div");
div.style.color = 'red';

然后回读:

alert( div.style.color );

关于javascript - 将值传递给显示函数javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14369672/

相关文章:

javascript - 如何将字符串转换为 map ?

ruby-on-rails - Rails 参数未传递给 'params' 变量

javascript - p2p网络编程

Javascript:数组作为对象属性(& ZeroClipboard)

javascript - 雪花和存储过程我们如何循环保存在内部阶段中的文件行?

javascript - 三元语句未返回正确的数据

regex - Perl如何将正则表达式传递给我的子例程,如grep

c# - 为什么 List<T> 没有采用 params 参数的构造函数?

javascript - 从 jquery 更改事件填充 2 个下拉列表

javascript - 为什么正方形不适合放在 div 内