Я все еще новичок в том, что касается 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";

В консоли выдает сообщение об ошибке «Не удается установить свойство« отображение »неопределенного. Должен ли я сначала определить это где-нибудь? Я консоль зарегистрировал новую переменную, и она возвратила оба элемента div.

-1
Curious13 29 Авг 2017 в 19:34

3 ответа

Лучший ответ

В JavaScript вы должны объявить все свои переменные. Во-вторых, вы не можете указывать на два объекта одновременно с помощью оператора +. JavaScript интерпретирует это как попытку объединить два объекта, что он не может сделать таким образом. Он вернет строку [object Object][object Object]

Чтобы воздействовать на два объекта одновременно, вам нужно создать функцию или использовать существующий метод.

0
zfrisch 29 Авг 2017 в 16:40

collection имеет тип string, так как оператор + автоматически вызывает обе функции toString().

Теперь вы пытаетесь получить доступ к свойству collection.style, которое не существует, потому что вы работаете со строкой. Вот причина, по которой вы получаете сообщение об ошибке.

Вы могли бы сделать что-то вроде:

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

Что, я думаю, вы пытаетесь архивировать.

2
Kristianmitk 29 Авг 2017 в 16:56

Просто чтобы дополнить принятый ответ, я думаю, вы должны понять, почему вы получаете эту ошибку.

Насколько я понимаю из вашего кода, вы пытаетесь установить css для variables партнера и providedBy равным display : none.

Ваш первый фрагмент кода работает, потому что вы делаете это отдельно, в то время как во втором коде вы пытаетесь добавить оператором (+) оба узла, что приводит к строке «[object HTMLDivElement] [object HTMLInputElement]».

Затем вы пытаетесь вызвать .style для этой строки, которая оценивается как undefined, а затем вы пытаетесь вызвать display для этого неопределенного значения, именно здесь вы получите ошибку.

Вы можете оставить свой код таким же образом, поскольку переменных не слишком много, но если вы хотите сделать что-то, что работает с несколькими переменными, вы можете

  1. создать массив
  2. вставьте ваши объекты в массив
  3. создайте функцию, которая зацикливается на элементах массива, и установите для их style.display = "none" значение по отдельности.
1
randomguy04 29 Авг 2017 в 16:56