1
0
mirror of synced 2025-02-16 20:13:16 +03:00

Backspace unselects item in multiple selects

The backspace key now behaves very similar to how it does in other
multiple select boxes, such as the one that Stack Exchange uses.
When the user presses the backspace key, the last selected option
is unselected and the search box is filled with the text of the
option.
This commit is contained in:
Kevin Brown 2014-12-10 19:17:11 -05:00
parent 0de516f17a
commit 395e06aff5
7 changed files with 134 additions and 14 deletions

View File

@ -1038,8 +1038,9 @@ define('select2/selection/allowClear',[
});
define('select2/selection/search',[
'../utils'
], function (Utils) {
'../utils',
'../keys'
], function (Utils, KEYS) {
function Search (decorated, $element, options) {
decorated.call(this, $element, options);
}
@ -1083,6 +1084,19 @@ define('select2/selection/search',[
self.trigger('keypress', evt);
self._keyUpPrevented = evt.isDefaultPrevented();
var key = evt.which;
if (key === KEYS.BACKSPACE && self.$search.val() === '') {
var $previousChoice = self.$searchContainer
.prev('.select2-selection__choice');
if ($previousChoice.length > 0) {
var item = $previousChoice.data('data');
self.searchRemoveChoice(item);
}
}
});
this.$selection.on('keyup', '.select2-search--inline', function (evt) {
@ -1119,6 +1133,16 @@ define('select2/selection/search',[
this._keyUpPrevented = false;
};
Search.prototype.searchRemoveChoice = function (item) {
this.trigger('unselected', {
data: item
});
this.trigger('open');
this.$search.val(item.text + ' ');
};
Search.prototype.resizeSearch = function () {
this.$search.css('width', '25px');

View File

@ -1038,8 +1038,9 @@ define('select2/selection/allowClear',[
});
define('select2/selection/search',[
'../utils'
], function (Utils) {
'../utils',
'../keys'
], function (Utils, KEYS) {
function Search (decorated, $element, options) {
decorated.call(this, $element, options);
}
@ -1083,6 +1084,19 @@ define('select2/selection/search',[
self.trigger('keypress', evt);
self._keyUpPrevented = evt.isDefaultPrevented();
var key = evt.which;
if (key === KEYS.BACKSPACE && self.$search.val() === '') {
var $previousChoice = self.$searchContainer
.prev('.select2-selection__choice');
if ($previousChoice.length > 0) {
var item = $previousChoice.data('data');
self.searchRemoveChoice(item);
}
}
});
this.$selection.on('keyup', '.select2-search--inline', function (evt) {
@ -1119,6 +1133,16 @@ define('select2/selection/search',[
this._keyUpPrevented = false;
};
Search.prototype.searchRemoveChoice = function (item) {
this.trigger('unselected', {
data: item
});
this.trigger('open');
this.$search.val(item.text + ' ');
};
Search.prototype.resizeSearch = function () {
this.$search.css('width', '25px');

View File

@ -10573,8 +10573,9 @@ define('select2/selection/allowClear',[
});
define('select2/selection/search',[
'../utils'
], function (Utils) {
'../utils',
'../keys'
], function (Utils, KEYS) {
function Search (decorated, $element, options) {
decorated.call(this, $element, options);
}
@ -10618,6 +10619,19 @@ define('select2/selection/search',[
self.trigger('keypress', evt);
self._keyUpPrevented = evt.isDefaultPrevented();
var key = evt.which;
if (key === KEYS.BACKSPACE && self.$search.val() === '') {
var $previousChoice = self.$searchContainer
.prev('.select2-selection__choice');
if ($previousChoice.length > 0) {
var item = $previousChoice.data('data');
self.searchRemoveChoice(item);
}
}
});
this.$selection.on('keyup', '.select2-search--inline', function (evt) {
@ -10654,6 +10668,16 @@ define('select2/selection/search',[
this._keyUpPrevented = false;
};
Search.prototype.searchRemoveChoice = function (item) {
this.trigger('unselected', {
data: item
});
this.trigger('open');
this.$search.val(item.text + ' ');
};
Search.prototype.resizeSearch = function () {
this.$search.css('width', '25px');

File diff suppressed because one or more lines are too long

28
dist/js/select2.js vendored
View File

@ -1466,8 +1466,9 @@ define('select2/selection/allowClear',[
});
define('select2/selection/search',[
'../utils'
], function (Utils) {
'../utils',
'../keys'
], function (Utils, KEYS) {
function Search (decorated, $element, options) {
decorated.call(this, $element, options);
}
@ -1511,6 +1512,19 @@ define('select2/selection/search',[
self.trigger('keypress', evt);
self._keyUpPrevented = evt.isDefaultPrevented();
var key = evt.which;
if (key === KEYS.BACKSPACE && self.$search.val() === '') {
var $previousChoice = self.$searchContainer
.prev('.select2-selection__choice');
if ($previousChoice.length > 0) {
var item = $previousChoice.data('data');
self.searchRemoveChoice(item);
}
}
});
this.$selection.on('keyup', '.select2-search--inline', function (evt) {
@ -1547,6 +1561,16 @@ define('select2/selection/search',[
this._keyUpPrevented = false;
};
Search.prototype.searchRemoveChoice = function (item) {
this.trigger('unselected', {
data: item
});
this.trigger('open');
this.$search.val(item.text + ' ');
};
Search.prototype.resizeSearch = function () {
this.$search.css('width', '25px');

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,7 @@
define([
'../utils'
], function (Utils) {
'../utils',
'../keys'
], function (Utils, KEYS) {
function Search (decorated, $element, options) {
decorated.call(this, $element, options);
}
@ -44,6 +45,19 @@ define([
self.trigger('keypress', evt);
self._keyUpPrevented = evt.isDefaultPrevented();
var key = evt.which;
if (key === KEYS.BACKSPACE && self.$search.val() === '') {
var $previousChoice = self.$searchContainer
.prev('.select2-selection__choice');
if ($previousChoice.length > 0) {
var item = $previousChoice.data('data');
self.searchRemoveChoice(item);
}
}
});
this.$selection.on('keyup', '.select2-search--inline', function (evt) {
@ -80,6 +94,16 @@ define([
this._keyUpPrevented = false;
};
Search.prototype.searchRemoveChoice = function (item) {
this.trigger('unselected', {
data: item
});
this.trigger('open');
this.$search.val(item.text + ' ');
};
Search.prototype.resizeSearch = function () {
this.$search.css('width', '25px');