Показать / скрыть проблему с Javascript

Я нашел этот скрипт в Интернете, он должен показывать скрытые текстовые поля и метки. любые изменения, которые я внесу в него, остановят его работу, если я изменю пароль div, он также не будет работать. Проблема в том, что если я выберу «НЕТ», то после этого все будет скрыто. Как мне заставить его скрывать только желаемую часть, и как установить флажок "Нет" по умолчанию?

<script type = "text/javascript">
  function ShowHideDiv() {
    var chkYes = document.getElementById("chkYes");
    var dvPassport = document.getElementById("dvPassport");
    dvPassport.style.display = chkYes.checked ? "block" : "none";
  }
</script>

<span>Do you have More Education?</span>
<label for = "chkYes">
       <input type = "radio" id = "chkYes" checked name = "chkEducation" 
    onclick = "ShowHideDiv()" />
       Yes
    </label>
<label for = "chkNo">
       <input type = "radio" id = "chkNo" name = "chkEducation" onclick = "ShowHideDiv()"/> 
        No
    </label>

Я попытался закончить его с помощью или body и начать новую голову, но это не помогло. Спасибо.

Пожалуйста, опубликуйте более полный образец кода. Например, где находится HTML-элемент с id = "dvPassport"?

alpha-before-beta 07.12.2018 16:09

Я не вижу, чтобы dvPassport действительно существовал?

Train 07.12.2018 16:46

нет, это не так, но если я изменю его, функция вообще не будет работать. Я нашел этот сценарий в Интернете и внес в него некоторые изменения. Спасибо.

AlwaysLearning 07.12.2018 17:31

@Andrea Naspi Спасибо за объяснение и помощь, я новичок в html и скучаю по простым вещам, но это очень ясно.

AlwaysLearning 07.12.2018 17:41

@Rachel Gallen Спасибо за объяснение и помощь, я новичок в html и упускаю из виду простые вещи, но это очень ясно.

AlwaysLearning 07.12.2018 17:42

@AlwaysLearning добро пожаловать :)

Rachel Gallen 07.12.2018 17: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) для оценки ваших знаний,...
1
6
121
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Чтобы установить "no" по умолчанию, установите input type = "radio" с id = "chkNo" в html как отмеченный (теперь отмеченный элемент - inpu type = "radio" с id = "chkYes") и установите div с id = "dvPassport" в HTML с style = "display: none". Функция ShowHideDiv кажется правильной, чтобы скрыть только те элементы, которые вы хотите, просто установите id = "dvPassport" в div, содержащем ТОЛЬКО текстовые поля и метки. Пример:

<script type = "text/javascript">
  function ShowHideDiv() {
    var chkYes = document.getElementById("chkYes");
    var dvPassport = document.getElementById("dvPassport");
    dvPassport.style.display = chkYes.checked ? "block" : "none";
  }
</script>

<span>Do you have More Education?</span>
<label for = "chkYes">
       <input type = "radio" id = "chkYes" name = "chkEducation" 
    onclick = "ShowHideDiv()" />
       Yes
    </label>
<label for = "chkNo">
       <input type = "radio" id = "chkNo" checked name = "chkEducation" onclick = "ShowHideDiv()"/> 
        No
</label>
<div id = "dvPassport" style = "display:none">
  <br/>
  <input type = "text" placeholder = "text1"/>
  <br/><br/>
  <input type = "text" placeholder = "text2"/>
<div>

Для начала, чтобы установить «нет» по умолчанию, вы просто переместите слово «проверено» из поля «Да» в поле «Нет»:

<input type = "radio" id = "chkNo" **checked** name = "chkEducation" onclick = "ShowHideDiv()"/> 

Я окружил ваш код div (id dvPassport), чтобы воссоздать вашу проблему. Один из способов решить эту проблему - использовать тег section в вашем div вокруг ваших переключателей. Я вставил тег абзаца после раздела, чтобы продемонстрировать эффект (например, если кто-то переключился на ДА, а затем обратно на НЕТ)

Надеюсь это поможет

Рэйчел

<script type = "text/javascript">
  function ShowHideDiv() {
    var chkYes = document.getElementById("chkYes");
    //var dvPassport = document.getElementById("dvPassport");
    var education = document.getElementById("edu");
    //dvPassport.style.display = chkYes.checked ? "block" : "none";
    education.style.display = chkYes.checked ? "block" : "none";
  }
</script>

<div id = "dvPassport">
 
 <section id = "edu">    
    <span>Do you have More Education?</span>
    <label for = "chkYes">
       <input type = "radio" id = "chkYes" name = "chkEducation" 
    onclick = "ShowHideDiv()" />
       Yes
    </label>
    <label for = "chkNo">
       <input type = "radio" id = "chkNo" checked name = "chkEducation" onclick = "ShowHideDiv()"/> 
        No
    </label>
  </section>

  <p>hello</p>
  
</div>

На самом деле, сделайте это так, как Андреа (если вы действительно не хотите скрыть вопрос?) .. Но разделы удобны для использования в будущем ..

Rachel Gallen 07.12.2018 17:13

Раздел - это хорошее решение, но обратите внимание, потому что в этом решении, когда вы ставите галочку «нет», он также скрывает переключатели, и вы не можете вернуться назад :)

Andrea Naspi 07.12.2018 18:03

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