2017-08-29 60 views
-1

对于JavaScript而言,我仍然是一个新手,并试图让我的代码更加清晰,并且想知道为什么顶部场景能够工作,但底部却不行?我错过了什么吗?使用属性显示设置变量赋值

var partner = document.getElementById('partner'); 
var providedBy = document.getElementById('providedBy'); 

partner.style.display = "none"; 
providedBy.style.display = "none"; 

但这不?

var partner = document.getElementById('partner'); 
var providedBy = document.getElementById('providedBy'); 
collection = partner + providedBy; 

collection.style.display = "none"; 

在控制台,它给了我错误说不能设置Property'display'的undefined。我应该首先在什么地方定义它?我控制台记录了新的变量,它返回了两个div元素。

+0

你正在关闭文档中的''''。' – randomguy04

+0

对不起,错我已经包含在我的代码中,它仍然不起作用 – Curious13

+1

在JavaScript中,你必须声明所有的变量。其次,使用+运算符不能一次指向两个对象。 JavaScript将此解释为尝试连接两个对象,而这是它不能这样做的。为了同时影响两个对象,您需要创建一个函数。 – zfrisch

回答

0

在JavaScript中,您必须声明所有变量。其次,使用+运算符不能一次指向两个对象。 JavaScript将此解释为尝试连接两个对象,而这是它不能这样做的。它将返回字符串[object Object][object Object]

为了同时影响两个对象,您需要创建一个函数或使用现有的方法。

+0

@torazaburo好,在OP的情况下,它不会返回任何东西。你能详细说明我错过了什么吗? – zfrisch

1

只是为了补充接受的答案,我想你应该明白为什么你会得到这个错误。

对于我所了解的代码,您试图将variables伙伴和providedBy的css设置为display : none。您的第一段代码可以独立工作,而在第二段代码中,您尝试使用(+)运算符添加两个节点,这些节点的计算结果为字符串“[object HTMLDivElement] [object HTMLInputElement]”。

然后,您尝试调用.style该字符串,其计算结果为undefined,然后尝试对该未定义的值调用display,这是您获取错误的位置。

你可以留下你的代码,就这样,因为不会有太多的变数,但如果你想要做一些事情,在多变量的工作,你可以

  1. 创建数组
  2. 把你的对象到数组
  3. 创建一个循环遍历数组元素并将其style.display =“none”分别设置的函数。
+0

这更清楚,但我已经接受了我给你和其他人+1的答案,帮助我更好地理解它,谢谢! – Curious13

+0

别担心,重要的是你明白发生了什么 – randomguy04

2

collection为字符串类型为+操作自动调用它们两者的功能toString()

现在你正在尝试的是访问collection.style的属性,因为你使用的是字符串,所以它不存在。这是您收到错误消息的原因。

你可以这样做:

var collection = []; 
collection.push(document.getElementById('partner')); 
collection.push(document.getElementById('providedBy')); 
collection.forEach(function(element) { 
    element.style.display = 'none'; 
} 

这会是这样,我认为你正试图存档。

+0

感谢您的澄清 – Curious13