Skip to content

A Number-Spinner, Support keyboard operations and continuous changing.

License

Notifications You must be signed in to change notification settings

vsn4ik/input-spinner

Repository files navigation

License Build Status

A Number-Spinner, Support keyboard operations and continuous changing.

Basic usage, it's very simple

<!-- // ref javascript file -->
<script src="dist/input-spinner.js"></script>

<!-- // spinner plugin DOM -->
<div data-trigger="spinner">
  <button type="button" data-spin="up">+</button>
  <input type="text" value="1" data-ruler="quantity">
  <button type="button" data-spin="down">-</button>
</div>

Getting Started

Download the production version or the development version.

In your web page:

<script src="jquery.js"></script>
<script src="dist/input-spinner.js"></script>
<script>
  $('#spinner')
    .spinner('delay', 200) // delay in ms
    .spinner('changed', function(e, newVal, oldVal) {
      // trigger lazed, depend on delay option.
    })
    .spinner('changing', function(e, newVal, oldVal) {
      // trigger immediately
    });
</script>

<div data-trigger="spinner" id="spinner">
  <button type="button" data-spin="up">+</button>
  <input type="text" value="1" data-ruler="quantity">
  <button type="button" data-spin="down">-</button>
</div>

Documentation

Spinner options

delay

delay to fire changed event in millisecond, default is 500.

changed

changed event handler, the changed event is a lazy-mode event, default is null.

changing

changing event handler, the changing event will be fired immediately, default is null.

Spinning Options(setup via data-api)

min

the minimum value, default is null.

max

the maximum value, default is null.

step

the changing-value of per-step, if passed as a function, the function will be called within the spinner object scope.

precision

the precision of value

Built-in rules

  currency: { min: 0.00, max: null, step: 0.01, precision: 2 },
  quantity: { min: 1, max: 999, step: 1, precision:0 },
  percent:  { min: 1, max: 100, step: 1, precision:0 },
  month:    { min: 1, max: 12, step: 1, precision:0 },
  day:      { min: 1, max: 31, step: 1, precision:0 },
  hour:     { min: 0, max: 23, step: 1, precision:0 },
  minute:   { min: 1, max: 59, step: 1, precision:0 },
  second:   { min: 1, max: 59, step: 1, precision:0 }

Usage:

<input type="text" value="1" data-rule="quantity">

Examples

Work with Bootstrap and Font Awesome

<link href="dist/input-spinner.css" rel="stylesheet">

<div class="input-group spinner" data-trigger="spinner">
  <input type="text" class="form-control text-center" value="1" data-rule="quantity">
  <span class="input-group-addon">
    <a href="javascript:;" class="spin-up" data-spin="up"><i class="fa fa-caret-up"></i></a>
    <a href="javascript:;" class="spin-down" data-spin="down"><i class="fa fa-caret-down"></i></a>
  </span>
</div>

Customize

specify a field

<div data-trigger="spinner">
  <input type="text" value="0" title="this field isn't a spinning.">
  <input type="text" value="1" data-spin="spinner" data-rule="quantity" data-max="10">
</div>

Use hidden field

<div data-trigger="spinner" id="spinner">
  <span id="spinner-value"></span>
  <input type="hidden" value="1" data-spin="spinner" data-rule="quantity" data-max="10">
  <a href="javascript:;" data-spin="down">-</a>
  <a href="javascript:;" data-spin="up">+</a>
</div>

<script>
  $('#spinner').spinner('changing', function(e, newVal, oldVal) {
    $('#spinner-value').html(newVal);
  });
</script>

pass step options as a function

// To skip 0
$('#spinner').spinner({
  step: function(dir) {
    // 'this' references to the spinner object
    if ((this.oldValue === 1 && dir === 'down') || (this.oldValue === -1 && dir === 'up')) {
      return 2;
    }
    return 1;
  }
});

// or use API syntax
$('#spinner').spinner('step', function(dir) {
  // your logic here
});

Copyright and license

Copyright Vasilii A., 2015–2018 Copyright xixilive, 2013–2015

Licensed under the MIT License.