Как скрыть div, когда я нажимаю на любой элемент при выборе опции?

#javascript

Вопрос:

Есть ли другой способ скрыть div, когда я нажимаю на любой элемент в опции «Выбрать»? Я пытаюсь это скрыть:

 <div id="video-borderr" class="video-borderr">ljlkj<iframe src="<?php echo $row['links'];?>" allowfullscreen="true" class="videorow"></iframe><div class="video-text"> <?php echo $row['titles'];?><br><?php echo $row['dates'];?> </div></div>
 

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

 <select id="state" multiple name="state" onchange="if(this.value != 0) { this.form.submit(); } hidehehehe(this);">

 <script>
    function hidehehehe() {
        document.getElementById("video-borderr").style.display = 'none';
    }
 </script> 
 

Спасибо!

Редактировать:

Спасибо за ответы, я думаю, что проблема в onchange=»if(this.value != 0) { this.form.submit(); который я использую для автоматической отправки опции выбора. Я попытался удалить его, и мое хидехехе работает. Не знаю, почему это происходит. Есть ли какой-нибудь подход, который я могу использовать?

Комментарии:

1. Извините, я скопировал старый код. Я уже редактирую свой пост, но все еще не работаю.

2. Я думаю, что единственная возможность заключается в том, что div с идентификатором video-borderr отсутствует в DOM, когда вы меняете значение select. В противном случае ваш код выглядит нормально.

Ответ №1:

Вероятно, вы получаете ошибки в консоли Cannot read property 'submit' of null

 onchange="if(this.value != 0) { this.form.submit(); } hidehehehe(this);"
                                          ^^^^^
 

Потому что здесь this есть ссылка select на и не содержит form.submit . Поскольку это становится ошибкой hidehehehe , это никогда не называется.

Решение Вы можете решить эту проблему следующим образом

 const form = document.getElementById("myForm");
const videoBorder = document.getElementById("video-borderr");

function onSelectChange(mySelect) {
  if (mySelect.value != 0) {
    form.submit();
  }
  videoBorder.style.display = 'none';
}

document.addEventListener("DOMContentLoaded", function(event) {
    // If above code doesn't work then you should wrap all the code here,
    // Since DOM is loaded and ready here.
}); 
 <div id="video-borderr">This is a video border div</div>

<form id="myForm">
  <select id="state" multiple name="state" onchange="onSelectChange(this)">
    <option value="0">0</option>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
  </select>
</form> 

Комментарии:

1. Я предполагаю, что ему нужно отправить форму только тогда, когда выбранное значение !=0, а в противном случае скрыть выбранный элемент.

2. Я использую onchange=»if(this.value != 0) { this.form.submit(); } для автоматической отправки опции выбора после ее нажатия. Но это также влияет на мое хидехехехе, всякий раз, когда я удаляю этот код, хидехехе работает. Вы знаете, почему это происходит? Спасибо!

3. @Pathfinder Я обновил свой ответ, и я также рекомендую вам прочитать это

4. @Pathfinder Обновил решение с выполняемым фрагментом кода.

5. Я протестировал ваш код на новом html-коде, ничего не изменив, но все еще не работает на моем компьютере. Но спасибо за вашу помощь и усилия!

Ответ №2:

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

 document.getElementById("state").addEventListener("change",()=>{
    document.getElementById("video-borderr").style.display = "none";
})
 
  <div id="video-borderr">
     <h1>heading</h1>
 </div>
 <select id="state">
     <option value="1">1</option>
     <option value="2">2</option>
 </select>
 

Комментарии:

1. У меня действительно есть опция в моем коде. И мой код выше, и ваш код для скрытия видео-borderrr работают, но проблема в том, что всякий раз, когда добавляется onchange=»если(это.значение != 0) { this.form.submit ();}, код просто больше не работает. Вы знаете, почему это происходит? Спасибо!