var progressbar = {
progress : null,
html : function() {
var loadingHtml = '<div id="loader-wrapper" class="catalog-loadmore">';
loadingHtml += '<div class="progress"><div id="catalog-bar" class="progress-bar progress-bar-striped active" style="width: 10%"></div></div>';
loadingHtml += '<div class=""><span id="progress-valuenow"></span>%</div>';
loadingHtml += '</div>';
return loadingHtml
},
start : function() {
var width = 10;
this.progress = setInterval(function() {
$('#catalog-bar').css('width', width + '%');
$('#progress-valuenow').text(width);
if(width < 98){
width += 1;
}else{
this.stop(); // this is not working
clearInterval(this.progress); // this is also not working
console.log('else')
}
}, 100);
},
stop : function() {
clearInterval(this.progress);
},
destroy : function() {
clearInterval(this.progress);
$('#loader-wrapper').remove();
}
}
В приведенном выше коде, поэтому следующий оператор не работает условие еще выполняется console.log('else')
печатает, но clearInterval() не работает. Я вызываю progressbar.destroy() извне и работает.Почему не setInterval останавливали clearInterval
this.stop(); // this is not working
clearInterval(this.progress); // this is also not working
Может ли кто-нибудь сказать мне, что я, что я делаю неправильно.
Я на самом деле не 100% уверен, но это будет работать только в классе, а не в внутренней части простого объекта, или я здесь не прав? – eisbehr
Возможный дубликат [Как это ключевое слово работает в литеральном объекте JavaScript?] (Http://stackoverflow.com/questions/133973/how-does-this-keyword-work-within-a-javascript-object- literal) – JJJ
Вы пытаетесь достичь 'this.progress', пока находитесь в другой области. У этого есть другое значение. Вам нужно сделать ссылку на 'this' вне' setInterval() 'и использовать эту переменную. – Bert