Выбор формы Javascript

Я хочу предоставить пользователям возможность выбора двух разных HTML-форм на основе выбора пользователя. Собрал отсюда и пару других ресурсов, вот что у меня есть на данный момент. Он работает в моем браузере Edge, но не в Chrome.

<!DOCTYPE html>
<html>
  <script language = "JavaScript">
function showInput() {
    document.getElementById('display1').innerHTML = 
                document.getElementById('FRAC_MULTI').value;
}

function changeOptions(selectEl) {
  let selectedValue = selectEl.options[selectEl.selectedIndex].value;
  let subForms = document.getElementsByClassName('className')
  for (let i = 0; i < subForms.length; i += 1) {
    if (selectedValue === subForms[i].name) {
      subForms[i].setAttribute('style', 'display:block')
    } else {
      subForms[i].setAttribute('style', 'display:none') 
    }
  }
}

  </script>
<head>
  <meta http-equiv = "Content-Type" content = "text/html; charset=UTF-8" />
</head>
<body>

<h2>Av. Temp Recorder</h2>
Choose Temperature Gauge:
<select onchange = "changeOptions(this)">
  <option value = "" selected = "selected">Select Option</option value = "">
  <option value = "form_1">Temp LVL 1</option>
  <option value = "form_2">Temp LVL 2</option>
</select>

<form class = "className" name = "form_1" id = "form_1" style = "display:none">
LVL 1 Configuration Form
  <!---- THIS IS FORM 1---->
</form>

<form class = "className" name = "form_2" id = "form_2" style = "display:none">
LVL 2 Configuration Form<br>
  <!---- THIS IS FORM 2---->
Fractal Multiplier:<input name = "name" size = "50" value = "500000" id = "FRAC_MULTI">
</form>
<br><br><br>
  <input type = "submit" onclick = "showInput();"><br/>
  <label>User input: </label><br><br><pre>
{
    "FRAC_MULTI":"<span id = "display1"></span>",
}
</pre>
</body>
</html>

Когда я выбираю первый вариант, я вижу правильный текст, но при выборе второго варианта в Chrome я не вижу никакой формы. В Edge я вижу форму при выборе варианта 2 И текст при выборе варианта 1.

В Chrome это работает, если я использую только текст в каждой форме (как показано в форме_1 выше), поэтому проблема заключается в том, что форма скрыта кодом.

Любые предложения относительно того, что проблема может быть?

Уточните, пожалуйста, что должен делать код, а что не так, как ожидалось, а также о любых возникших ошибках. См. Как спросить

charlietfl 31.03.2019 23:45

у тебя есть консольные логи?

jonathan Heindl 31.03.2019 23:48
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
108
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ситуация следующая: когда вы найдете все элементы с getElementsByClassName, вы получите список HTMLCollection с дочерними элементами. Когда вы ссылаетесь на subForms[1].name, вы возвращаете поле ввода в случае хрома вместо атрибута имени формы. Если вы переименуете атрибут имени поля ввода в name2, ваш скрипт будет работать, или вы можете использовать subForms[i].getAttribute('name'), и тогда вы вернете атрибут вместо чего-то. В крае, когда вы запускаете код вручную, элемент ввода будет возвращен, но кажется, что когда он запускает код, он выполняет какой-то магический трюк и отдает предпочтение значению атрибута вместо элемента. Возможно, потому что он обнаруживает, что вы хотите сравнить строку вместо Element.

Обратите внимание: доступ к элементам HTMLCollection можно получить по их имени, идентификатору или номеру индекса.

Спасибо за отзыв, похоже, вы правы на 100%, и ваш ответ дает отличное объяснение! Меня не заботило, как я использовал «имя» для имени атрибута, поэтому я изменил это.

rev_it_up 01.04.2019 14:09

Я бы также использовал getAttribute() с правильным названием, потому что в долгосрочной перспективе это окупится, если вы сделаете это правильно. ;)

golddragon007 01.04.2019 17:37

Другие вопросы по теме