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