Хочу вернуть число, возвращает [object Object]
В методе onChange() класса ProgressBar хочу вернуть число, а возвращает [object Object]
class ProgressBar {
constructor() {
this.input = $('.progress-bar').find('.progress-bar__input');
}
progress(percentage) {
let val = 0;
if (percentage > 100) {
val = 100;
} else if (percentage < 0) {
val = 0;
} else {
val = percentage;
}
$('.progress-bar__fill').css('width', `${100 - val}%`);
$('.progress-bar__percent').text(`${val}%`);
}
onChange() {
this.input.change(function() {
console.log(typeof + this.value);
return this.value;
});
console.log(this.input.change());
this.progress(this.input.change());
}
}
const progressBar = new ProgressBar();
progressBar.onChange();
.progress-bar {
background-image: linear-gradient(90deg, rgb(255, 76, 76) 0%, rgb(238, 185, 0) 44%, rgb(62, 179, 84) 100%);
position: relative;
overflow: hidden;
max-width: 540px;
width: 100%;
height: 54px;
margin-right: 20px;
border: 1px solid;
border-radius: 6px;
}
.progress-bar__fill {
position: absolute;
right: 0;
top: 0;
height: 100%;
width: 100%;
background-color: #eaeaea;
transition: all .3s;
}
.progress-bar__percent {
position: absolute;
top: 10px;
right: 20px;
font-size: 18px;
line-height: 32px;
font-weight: 600;
color: #fff;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="progress-bar">
<label>
<input data-percentage="99" type="hidden" class="progress-bar__input">
</label>
<span class="progress-bar__fill"></span>
<span class="progress-bar__percent"></span>
</div>
Ответы (2 шт):
Автор решения: Igor
→ Ссылка
Что это делает?
this.input.change(function() {
return +this.value;
});
this.progress(+this.input.val());
Автор решения: Grundy
→ Ссылка
this.input - в данном случае это jQuery объект.
this.input.change - это метод jQuery объекта, при вызове с параметром устанавливает обработчик события change, при вызове без параметров - запускает указанный обработчик. В обоих описанных случаях возвращает этот же jQuery объект.
Так как в приведенном коде вместо числа идет работа с jQuery объектом и получается описанный результат.
Вместо этого нужно брать значение инпута, например с помощью метода .val()