Ошибка пользовательского интерфейса при изменении значения с помощью мыши вверх и вниз

0

Я добавил десятичный счетчик на свой сайт.

Моя ценность была 56.20. Когда я меняю использование колеса мыши, я ожидаю 57.20, но теперь он показывает 57:00.

Функция показана ниже:

<script>
  $(function() {
    $( "#spinner" ).spinner({
      step: 1.00,
      numberFormat: "n"
    });

    $( "#culture" ).change(function() {
      var current = $( "#spinner" ).spinner( "value" );
      Globalize.culture( $(this).val() );
      $( "#spinner" ).spinner( "value", current );
    });
  });
  </script>

Я тоже включил демо

Теги:

2 ответа

3
Лучший ответ

Я не думаю, что это ошибка, извините, скажем, она просто округляет - я думаю, что это часть кода jQuery внутри spinner.js, которая выполняет округление:

Во время _spin():

value = this._adjustValue( value + step * this._increment( this.counter ) );

Вызывает _adjustValue():

_adjustValue: function( value ) {
    var base, aboveMin,
        options = this.options;

    // make sure we're at a valid step
    // - find out where we are relative to the base (min or 0)
    base = options.min !== null ? options.min : 0;
    aboveMin = value - base;

    // - round to the nearest step
    aboveMin = Math.round(aboveMin / options.step) * options.step;

    // - rounding is based on 0, so adjust back to our base
    value = base + aboveMin;

    // fix precision from bad JS floating point math
    value = parseFloat( value.toFixed( this._precision() ) );

    // clamp the value
    if ( options.max !== null && value > options.max) {
        return options.max;
    }
    if ( options.min !== null && value < options.min ) {
        return options.min;
    }

    return value;
},

Источник: jQuery UI GitHub

Но то, что вы могли бы попробовать, - это уловить ценность до начала вращения, а затем снова настроить значение после завершенного вращения, основываясь на том, что у вас было раньше, с двумя событиями обратного вызова ниже:

var beforeSpin = 1.00;

$( "#spinner" ).spinner({
      step: 1.10,
      numberFormat: "n",
      start: function( event, ui ) {
          beforeSpin = ui.value;
      },
      //or stop: function(){}
      spin: function( event, ui ) {
          //Do some re-value
          //funciton based on old value
      }
});

Это или _adjustValue: function() для ваших нужд - Open Source в конце концов :)

0

Здесь все выглядит хорошо, просто установите шаг 1.10.

Пример:

$( "#spinner" ).spinner({
  step: 1.10,
  numberFormat: "n"
});

Подглядеть ДЕМО

Я должен добавить, что вы можете соответствующим образом настроить значение приращения.

  • 0
    Это не работает должным образом, так как будет шаг за шагом 1 только при первом клике, а затем на 1.1 при последовательных кликах, тем самым разрушая эффект.
  • 0
    @ D.Alexander Спасибо за ответ. но проблема до сих пор не решена. Я хочу 1,00 в качестве разницы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню