javascript удалить все элементы: неперехваченная синтаксическая ошибка: неожиданный идентификатор

#javascript #jquery

#javascript #jquery

Вопрос:

Вопросы такого типа часто задавались на этом сайте, но я не понимаю, почему это происходит. Я хочу написать скрипт, который удаляет все элементы с классом «not_imp_msg», и я сделал это

 setTimeout($('.not_imp_msg').each(function(){$(this).slideDown();}),2000); 
  

На самом деле это для флэш-сообщения в laravel и в моем flash.blade.php

 @foreach($flash as $flash_message)
    @if(isset($flash_message['status']) amp;amp; $flash_message['status'] != null)
<div class="box box-{{$flash_message['class']}} box-solid">
    <div class="box-tools pull-right">
      <button type="button" class="btn btn-box-tool" data-widget="remove"><i class="fa fa-times"></i></button>
    </div>
    <div class="box-body">
      {{$flash_message['message']}}
    </div>
  </div>
    @else
    <div class="box box-{{$flash_message['class']}} box-solid not_imp_msg">
      <div class="box-body">
      {{$flash_message['message']}}
    </div>
  </div>
    @endif

@endforeach
  

Это выдает мне ошибку через 2 секунды, но все элементы скользят вверх, как только загружаются документы. Не следует ли подождать 2 секунды. Я не могу понять, почему.

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

1. Вам нужно обернуть обратный вызов по таймауту в анонимную функцию: setTimeout(function(){...}, 2000);

2. извините? не могли бы вы объяснить, пожалуйста

Ответ №1:

Попробуйте передать анонимную функцию, так как setTimeout ожидается имя функции или анонимная функция:

 $(document).ready(function() {
  setTimeout(function() {
    $('.not_imp_msg').slideDown();
  }, 2000);
});  
 .not_imp_msg {
  background-color: #ddd;
  border-top: 1px solid white;
  height: 50px;
  display: none;
}  
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="not_imp_msg"></div>
<div class="not_imp_msg"></div>
<div class="not_imp_msg"></div>
<div class="not_imp_msg"></div>
<div class="not_imp_msg"></div>  


Дополнительные примечания

Если вы хотите удалить элементы, используйте функцию обратного вызова slideUp(callback) к .remove элементам.


.slideDown откроет элементы, .slideUp свернет элементы, но они по-прежнему будут представлены в DOM с высотой 0 пикселей

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

1. Я забыл вызвать closure при setTimeout. спасибо, что указали на это

Ответ №2:

Попробуйте вот так:

 setTimeout(
function () {
    $('.not_imp_msg').each(function(){
       $(this).slideDown();
    };
}, 2000); 
  

Надеюсь, это сработает!
Кстати, можете ли вы предоставить сообщение об ошибке в консоли?

Ответ №3:

вы просто забыли обернуть внутреннюю часть вашего setTimeout в функцию

 setTimeout(function(){
    $('.not_imp_msg').each(function(){$(this).slideDown();}) 
},2000);