JQuery从另一个函数async调用输入值

时间:2017-03-15 10:21:23

标签: javascript jquery asynchronous ion-range-slider

使用离子rangelider。我试图调用我设置为日志缩放的我的美化功能的值。我的日志缩放工作,但当我尝试将其调回我的其他异步函数时,我无法得到相同的结果。

我希望从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 个答案:

答案 0 :(得分:1)

有了这个工作,想发布它以防万一其他人正在寻找。

您需要这样称呼它:

imprValue = this.prettify(data.from);

在这里工作jsfiddle:http://jsfiddle.net/jsbegin/7dbowqfd/68/

答案 1 :(得分:1)

你应该知道,内置美化功能只是为了在视觉上改善滑块值。它不会影响原始数据。

如果您想要转换原始数据,则应创建外部函数。像这样:

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/