Я не понимаю. В отладчике Chrome он работает, но когда я отключу его и обновляю страницу, мой div будет чистым.
<script type="text/javascript">
$(document).ready(function() {
function banner_change(span) {
if ($(span).hasClass('show')) {
$(span).removeClass('show');
}
}
$('div#spec_banner span').each(function () {
if (!$(this).hasClass('show')) {
$(this).addClass('show')
}
setTimeout(banner_change(this), 5000);
});
});
</script>
Спасибо, что ответили.
несколько проблем, синтаксис и область действия
При использовании setTimeout без анонимной функции синтаксис:
setTimeout(banner_change, 5000); /* no () */
Чтобы передать аргументы, выполните следующие действия:
setTimeout(function(){
banner_change(this);
}, 5000);
Но также, обратно в область видимости, this
потеряло контекст внутри setTimeout (теперь это скорее window
), поэтому необходимо назначить переменную вне setTimeout
$('div#spec_banner span').each(function () {
if (!$(this).hasClass('show')) {
$(this).addClass('show')
}
var span =this
setTimeout(function(){
banner_change(span);
}, 5000);
});
Это проблема:
setTimeout(banner_change(this), 5000);
Вы на самом деле вызываете banner_change здесь - попробуйте
setTimeout(function(){
banner_change('div#spec_banner span');
}, 5000);
Звонок, который вы изначально делали, сразу же banner_change
и передавал возвращаемое значение setTimeout
получить функцию из документа, готового к ее правильной работе
вам нужно передать результат функции ссылки не на функцию вызова функции.
setTimeout( $.proxy(banner_change, this), 5000);
$.proxy для ссылки на функцию гарантирует, что ваша функция будет вызвана с помощью этого "контекста".