Skip to content

Commit e42de7b

Browse files
committed
feat(RangeSlider): add input event, improve change event to fire on interaction end
1 parent a9bb2e3 commit e42de7b

File tree

4 files changed

+11
-5
lines changed

4 files changed

+11
-5
lines changed

docs/content/forms/range-slider.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,8 @@ const rangeSlider = new RangeSlider(rangeSliderElement, {
230230
{{< bs-table >}}
231231
| Method | Description |
232232
| --- | --- |
233-
| `change.coreui.range-slider` | Fired when the slider value changes. |
233+
| `change.coreui.range-slider` | Fired when the slider value changes and the user finishes interacting (mouse up). |
234+
| `input.coreui.range-slider` | Fired continuously while the slider value is being changed during user interaction. |
234235
{{< /bs-table >}}
235236

236237
```js

js/src/dom/event-handler.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ const nativeEvents = new Set([
5656
'focus',
5757
'blur',
5858
'change',
59+
'input',
5960
'reset',
6061
'select',
6162
'submit',

js/src/range-slider.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ const EVENT_KEY = `.${DATA_KEY}`
2121
const DATA_API_KEY = '.data-api'
2222

2323
const EVENT_CHANGE = `change${EVENT_KEY}`
24-
const EVENT_INPUT = 'input'
24+
const EVENT_INPUT = `input${EVENT_KEY}`
2525
const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`
2626
const EVENT_MOUSEDOWN = `mousedown${EVENT_KEY}`
2727
const EVENT_MOUSEMOVE = `mousemove${EVENT_KEY}`
@@ -133,6 +133,11 @@ class RangeSlider extends BaseComponent {
133133
const children = SelectorEngine.children(target.parentElement, SELECTOR_RANGE_SLIDER_INPUT)
134134
const index = Array.from(children).indexOf(target)
135135
this._updateValue(target.value, index)
136+
EventHandler.trigger(this._element, EVENT_INPUT, { value: this._currentValue })
137+
})
138+
139+
EventHandler.on(this._element, EVENT_CHANGE, SELECTOR_RANGE_SLIDER_INPUT, () => {
140+
EventHandler.trigger(this._element, EVENT_CHANGE, { value: this._currentValue })
136141
})
137142

138143
EventHandler.on(this._element, EVENT_MOUSEDOWN, SELECTOR_RANGE_SLIDER_LABEL, event => {
@@ -516,7 +521,6 @@ class RangeSlider extends BaseComponent {
516521
this._updateInput(index, _value)
517522
this._updateGradient()
518523
this._updateTooltip(index, _value)
519-
EventHandler.trigger(this._element, EVENT_CHANGE, { value: this._currentValue })
520524
}
521525

522526
_updateInput(index, value) {

js/tests/unit/range-slider.spec.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ describe('RangeSlider', () => {
175175
expect(labels.length).toBe(3)
176176

177177
// Spy on the updateNearestValue method indirectly via event
178-
element.addEventListener('change.coreui.range-slider', event => {
178+
element.addEventListener('input.coreui.range-slider', event => {
179179
const newValue = event.value
180180
expect(newValue).toEqual([20, 50, 90])
181181
resolve()
@@ -244,7 +244,7 @@ describe('RangeSlider', () => {
244244
expect(tooltip.textContent).toBe('$25')
245245

246246
// Update the value
247-
element.addEventListener('change.coreui.range-slider', event => {
247+
element.addEventListener('input.coreui.range-slider', event => {
248248
const newValue = event.value
249249
const updatedTooltip = element.querySelector('.range-slider-tooltip-inner')
250250
expect(updatedTooltip.textContent).toBe('$35')

0 commit comments

Comments
 (0)