#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);