JQuery вызывает входное значение из другой асинхронной функции
Используя ионный слайдер для этого. Я пытаюсь вызвать значение моей функции prettify, которое я установил для масштабирования журнала. Масштабирование моего журнала работает, но когда я пытаюсь вызвать его обратно в другие асинхронные функции, я не могу получить тот же результат.
Я хочу, чтобы результат, полученный от функции prettify, проходил через функции onStart, OnChange, onFinish.
onStart: function(data) {
imprValue = data.from;
console.log("onstart:" + imprValue);
inputValues();
},
onChange: function(data) {
imprValue = data.from;
console.log("onchange:" + imprValue);
inputValues();
},
onFinish: function(data) {
imprValue = prettify();
console.log("onfinish:" + imprValue);
inputValues();
},
prettify: function(n) {
// current position
var position = Math.floor(n / this.max * 100);
// position will be between 0 and 100
var minPos = 0,
maxPos = 100;
// calculate logarithms
var minLog = Math.log(this.min),
maxLog = Math.log(this.max);
// calculate adjustment factor
var scale = (maxLog-minLog) / (maxPos-minPos);
// round numbers
n = Math.floor(Math.exp(minLog + scale * (position - minPos)));
console.log("prettify function:" + n);
return n;
}
Jsfidde здесь: http://jsfiddle.net/jsbegin/7dbowqfd/61/
2 ответа
Получил это работает, хотел опубликовать его на случай, если кто-то еще смотрит.
Вы должны назвать это так:
imprValue = this.prettify(data.from);
Рабочая jsfiddle здесь: http://jsfiddle.net/jsbegin/7dbowqfd/68/
Вы должны знать, что встроенная функция prettify была сделана только для визуального улучшения значений ползунков. Это не влияет на исходные данные.
Если вы тоже хотите преобразовать исходные данные, вам следует создать внешнюю функцию. Как это:
var $range = $(".js-range-slider");
var $result = $(".js-result");
function transform(num) {
var n = num.toString();
return n.replace(/(\d{1,3}(?=(?:\d\d\d)+(?!\d)))/g, "$1" + ",");
}
$range.ionRangeSlider({
type: "single",
grid: true,
min: 10000,
max: 10000000,
from: 10000,
prettify_separator: ",",
onStart: function(data) {
$result.text(transform(data.from));
},
onChange: function(data) {
$result.text(transform(data.from));
}
});
Скрипка: http://jsfiddle.net/IonDen/133bvhn3/