A Bootstrap 5 / jQuery plugin to create input spinner elements for number input.
npm install bootstrap-input-spinnerA Bootstrap extension to create input spinner elements for number input.
> Note: bootstrap-input-spinner is now a ES6 module. You find the old ES5 version in the folder es5-deprecated. The ES5 version is not maintained anymore and will be removed in the future.
!bootstrap-input-spinner
Examples with floating-point and german localization
- Demo page with usage examples
- GitHub repository
- npm package
> The current is compatible with Bootstrap 5, but we remain a Bootstrap 4 compatible version with the branch
> bootstrap4-compatible.
> npm package versions 3.x are Bootstrap 5 compatible, versions 2.x Bootstrap 4 compatible.
- Bootstrap 4 compatible npm package
The Bootstrap InputSpinner
- is mobile friendly and responsive,
- automatically changes the value when holding a button,
- has internationalized number formatting,
- allows setting a prefix or a suffix text in the input,
- handles val() like the native element,
- dynamically handles changing attribute values like disabled or class,
- supports templates and custom editors, (new!)
- dispatches change and input events on value change like the native element and
- works without extra css, only Bootstrap 5 is needed.
Current version, Bootstrap 5 compatible
``bash`
npm install bootstrap-input-spinner`
Bootstrap 4 compatible versionbash`
npm install bootstrap-input-spinner@2.2.0
Or just download the GitHub repository and include src/bootstrap-input-spinner.js.
Create the element in HTML. The attributes are compatible to the native input[type="number"] element.
`html`
`html`
That's it. No extra css needed, just Bootstrap 5 and jQuery. (Note: jQuery will be removed in the future)
`html`
Use these attributes to configure the behaviour
- value // starting value on element creationmin
- // minimum value when steppingmax
- // maximum value when steppingstep
- // step sizeinputmode
- // the "inputmode" of the input, defaults to "decimal" (shows decimal keyboard on touch devices)data-decimals
- // shown decimal placesdata-digit-grouping
- // "false" to disable grouping (thousands separator), default is "true"data-prefix
- // show a prefix text in the input elementdata-suffix
- // show a suffix text in the input element
The InputSpinner also handles the standard input attributes required, disabled, readonly and placeholder.
Use JavaScript to create the instance as a jQuery plugin. You may provide additional configuration in an object as a
config parameter.
`js`
$(element).inputSpinner(config);
#### Configuration (props)
The default configuration is
`javascriptundefined
var props = {
decrementButton: "−", // button text
incrementButton: "+", // ..
groupClass: "", // css class of the resulting input-group
buttonsClass: "btn-outline-secondary",
buttonsWidth: "2.5rem",
textAlign: "center", // alignment of the entered number
autoDelay: 500, // ms threshold before auto value change
autoInterval: 50, // speed of auto value change, set to to disable auto-changetrue
buttonsOnly: false, // set this to disable the possibility to enter or paste the number via keyboardfalse
keyboardStepping: true, // set this to to disallow the use of the up and down arrow keys to step`
locale: navigator.language, // the locale, per default detected automatically from the browser
editor: I18nEditor, // the editor (parsing and rendering of the input)
template: // the template of the input
'' +'
'' +
'' +
'' +
'
}
##### decrementButton, incrementButton
HTML of the texts inside the buttons.
##### groupClass
Additional css class for the input-group of the rendered Bootstrap input.
##### buttonsClass
The css class of the buttons. Use it to style the increment and decrement buttons as
described here. Maybe buttonsClass: btn-primarybtn-success
or or whatever type of buttons you want.
##### buttonsWidth
The width of the increment and decrement buttons.
##### textAlign
The text alignment inside the .
##### autoDelay
The delay in ms after which the input automatically changes the value, when holding the increment or decrement button.
##### autoInterval
Speed of the value change when holding the button in ms. A lower value makes it faster.
##### buttonsOnly
In buttonsOnly mode (set true) no direct text input is allowed, the text-input gets the attribute readonly, but
the plus and minus buttons still allow to change the value.
##### keyboardStepping
In keyboardStepping mode (set true) allows the use of the up/down arrow keys to increase/decrease the number by the
step.
##### locale
Used to format the number in the UI. Detected automatically from the user's browser, can be set to "de", "en",… or "
de_DE", "en_GB",….
##### editor (new!)
An Editor defines, how the input is parsed and rendered. The default editor of the spinner is the I18nEditor, which/src/custom-editors.js
renders and parses an internationalized number value. There are custom editors in . An Editorparse(customValue)
must implement the two functions , to parse the input to a number and render(number) to render the
number to the spinner input.
The simplest custom Editor is the RawEditor, it renders just the value und parses just the value, without any changes,
like a native number input. It looks like this:
`javascript`
var RawEditor = function (props, element) {
this.parse = function (customFormat) {
// parse nothing
return customFormat
}
this.render = function (number) {
// render raw
return number
}
}
props is the configuration of the spinner and element is the original HTML element. You can use these values for theI18nEditor
configuration of the Editor, like in , which uses props for the language and element for the attributes.
The TimeEditor renders and parses the number to time in hours and minutes, separated by a colon.
!bootstrap-input-spinner
Supports custom editors to parse and render everything
##### template
To modify the look completely, you can use the template parameter. There is an example about this on the
Demo Page.
To change or read the value just use the jQuery val() function on the input, like this
`javascript`
var currentValue = $(element).val() // read
$(element).val(newValue) // write
> Hint: Reading the value in vanilla JS with element.value will also work, but to set the value you have to use element.setValue(newValue) or $(element).val(newValue)
The attributes
min, max, step, decimals, placeholder, required, disabled, readonly and classclass
are handled dynamically. The attribute value is dynamically copied to the input element.
#### Sizing
If the original elements class is set to form-control-sm of form-control-lg the class of the resulting input-groupinput-group-sm
is dynamically set to or input-group-lg.
The InputSpinner handles input and change events like the native element.
#### Event handling with vanilla JavaScript
`javascript`
element.addEventListener("change", function (event) {
newValue = this.value
})
#### Event handling with jQuery syntax
`javascript`
$(element).on("change", function (event) {
newValue = $(this).val()
})
Methods are passed as string values instead of the options object.
#### destroy
Removes the InputSpinner and shows the original input element.
`javascript`
$(element).inputSpinner("destroy")
I don't provide a minified version because I think it should be up to the using programmer to create minified versions,
with all the used script sources concatenated to one file.
But, if you want it, it is easy to create your minified version with uglify: https://www.npmjs.com/package/uglify-js
Just install uglify
`bash`
npm install uglify-js -g
and then in the src-folder
`bash`
uglifyjs bootstrap-input-spinner.js --compress --mangle > bootstrap-input-spinner.min.js
Violà! :)
The spinner works in all modern browsers and Internet Explorer. Not tested with IE < 11.
For older browsers (IE 9 or so), that doesn't support Intl`, when you get an error message like
"Intl is not defined" (See issue #34), just use a
shim or polyfill like Intl.js, and it works.
---
Find more high quality modules from shaack.com
on our projects page.