Есть ли решение javascript для зависимых полей выбора?

Я пытаюсь настроить зависимое поле на основе поля выбора реферала. Если выбран один из вариантов реферала, я бы хотел, чтобы поле имени моего реферала отображалось в форме.

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

<div class = "smartcapture-controls"><div class = "sc-formfield-label"><label 
for = "Hear About">How Did you Hear About Us? *</label></div>
<div class = "sc-formfield-input">
 <select id = "master-dependent" name = "Hear About" data-field-type = "Text" 
required = "required" data-validation-message = "Please fill out this 
field.">
  <option value = "" selected = "selected"></option>

  <option value = "Through ICC">Through ICC</option>

  <option value = "Through Triumph Business Capital">Through Triumph 
Business Capital</option>

  <option value = "Through Another Triumph Employee">Through Another 
Triumph Employee</option>

  <option value = "Through a Triumph Insurance Client">Through a Triumph 
Insurance Client</option>

  <option value = "Online Search">Online Search</option>

  <option value = "Social Media">Social Media</option>

 </select>
</div>
</div>

Если выбран любой из первых 4 вариантов, я бы хотел, чтобы он отображал мое реферальное поле ниже

<div id = "dependent" style = "display:none;" class = "smartcapture-controls"> 
 <div class = "sc-formfield-label"><label for = "Referral Name">Referral Name * 
 </label></div>
<div class = "sc-formfield-input"><input type = "text" name = "Referral Name" 
data-field-type = "Text" required = "required" data-validation-message = "Please fill out this field."></div>
</div>

Это был код, который я пробовал ниже, но, похоже, не могу заполнить поле реферала

<script>
function showHideReferral() {
    if (document.getElementByID("master-dependent").value= = "Through ICC") {
        document.getElementById("dependent").style.display = "block";

    } else {
        document.getElementById("dependent").style.display = "none";
    }
}

</script>

Ожидаемый результат — заполнить поле реферала в форме, если выбран любой из первых 4 вариантов. Но в настоящее время мое реферальное поле остается скрытым независимо от выбора.

Где звонок showHideReferral()?

Barmar 14.05.2019 19:03

да, добавьте onchange = "showHideReferral()" к тегу выбора

omikes 14.05.2019 19:04
Поведение ключевого слова "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) для оценки ваших знаний,...
2
2
88
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вам нужно получить значение поля выбора, как показано ниже, и выполнить сравнение

<script>
function showHideReferral() {
    *if (document.getElementByID("master-dependent").options[e.selectedIndex].value= = "Through ICC"){*
        document.getElementById("dependent").style.display = "block";

    } else {
       document.getElementById("dependent").style.display = "none";
    }
}

добавить onchange = "showHideReferral(this)" к select и

function showHideReferral(select) {
  let v = ["","Social Media","Online Search"];

  dependent.style.display = v.includes(select.value) ? "none" : "block";
}

function showHideReferral(select) {
  let v = ["","Social Media","Online Search"];
  
  dependent.style.display = v.includes(select.value) ? "none" : "block";
}
<div class = "smartcapture-controls">
  <div class = "sc-formfield-label"><label for = "Hear About">How Did you Hear About Us? *</label></div>
  <div class = "sc-formfield-input">
    <select id = "master-dependent" name = "Hear About" data-field-type = "Text" required = "required" data-validation-message = "Please fill out this 
field." onchange = "showHideReferral(this)">
      <option value = "" selected = "selected"></option>

      <option value = "Through ICC">Through ICC</option>

      <option value = "Through Triumph Business Capital">Through Triumph Business Capital</option>

      <option value = "Through Another Triumph Employee">Through Another Triumph Employee</option>

      <option value = "Through a Triumph Insurance Client">Through a Triumph Insurance Client</option>

      <option value = "Online Search">Online Search</option>

      <option value = "Social Media">Social Media</option>

    </select>
  </div>
</div>




<div id = "dependent" style = "display:none;" class = "smartcapture-controls">
  <div class = "sc-formfield-label"><label for = "Referral Name">Referral Name * 
 </label></div>
  <div class = "sc-formfield-input"><input type = "text" name = "Referral Name" data-field-type = "Text" required = "required" data-validation-message = "Please fill out this field."></div>
</div>

Вы забыли первый вариант. Пожалуйста, добавьте это в свой массив и дайте мне знать об этом.

Lajos Arpad 14.05.2019 19:15

Вы правы, это неясно, но, вероятно, OP w хочет, чтобы первые 4 непустых параметра отображали дополнительное поле - ответ обновлен

Kamil Kiełczewski 14.05.2019 19:19

Это хороший ответ сейчас.

Lajos Arpad 14.05.2019 19:21
Ответ принят как подходящий

Убедитесь, что вы называете свое шоу скрытым function в событии onchange, что вы исправляете опечатки, такие как getElementByID (вместо этого правильно getElementById), и что ваша логика верна. Это проверенное решение:

  function showHideReferral() {
        if (document.getElementById("master-dependent").value.indexOf("Through") == 0) {
            document.getElementById("dependent").style.display = "block";
    
        } else {
            document.getElementById("dependent").style.display = "none";
        }
    }
<div class = "smartcapture-controls"><div class = "sc-formfield-label"><label 
    for = "Hear About">How Did you Hear About Us? *</label></div>
    <div class = "sc-formfield-input">
     <select onchange = "showHideReferral()" id = "master-dependent" name = "Hear About" data-field-type = "Text" 
    required = "required" data-validation-message = "Please fill out this 
    field.">
      <option value = "" selected = "selected"></option>
    
      <option value = "Through ICC">Through ICC</option>
    
      <option value = "Through Triumph Business Capital">Through Triumph 
    Business Capital</option>
    
      <option value = "Through Another Triumph Employee">Through Another 
    Triumph Employee</option>
    
      <option value = "Through a Triumph Insurance Client">Through a Triumph 
    Insurance Client</option>
    
      <option value = "Online Search">Online Search</option>
    
      <option value = "Social Media">Social Media</option>
    
     </select>
    </div>
    </div>
    
    <div id = "dependent" style = "display:none;" class = "smartcapture-controls"> 
     <div class = "sc-formfield-label"><label for = "Referral Name">Referral Name * 
     </label></div>
    <div class = "sc-formfield-input"><input type = "text" name = "Referral Name" 
    data-field-type = "Text" required = "required" data-validation-message = "Please fill out this field."></div>
    </div>
    

Я подумал, что это было что-то простое, что я забыл. Это решение сработало для меня, большое спасибо за вашу помощь!

RunRabbit 14.05.2019 20:37

@RunRabbit Я рад, что проблема решена.

Lajos Arpad 14.05.2019 20:39

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