Ensure that the highlighted result is visible
When opening the dropdown, the highlighted result will not always be scrolled into view if it isn't already.
This commit is contained in:
parent
a728d948c1
commit
5dd5ad93a6
26
dist/js/select2.amd.full.js
vendored
26
dist/js/select2.amd.full.js
vendored
@ -333,6 +333,7 @@ define('select2/results',[
|
|||||||
self.$results.attr('aria-hidden', 'false');
|
self.$results.attr('aria-hidden', 'false');
|
||||||
|
|
||||||
self.setClasses();
|
self.setClasses();
|
||||||
|
self.ensureHighlightVisible();
|
||||||
});
|
});
|
||||||
|
|
||||||
container.on('close', function () {
|
container.on('close', function () {
|
||||||
@ -469,6 +470,31 @@ define('select2/results',[
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Results.prototype.ensureHighlightVisible = function () {
|
||||||
|
var $highlighted = this.$results.find('.highlighted');
|
||||||
|
|
||||||
|
if ($highlighted.length === 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var $options = this.$results.find('[aria-selected]');
|
||||||
|
|
||||||
|
var currentIndex = $options.index($highlighted);
|
||||||
|
|
||||||
|
var currentOffset = this.$results.offset().top;
|
||||||
|
var nextTop = $highlighted.offset().top;
|
||||||
|
var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);
|
||||||
|
|
||||||
|
var offsetDelta = nextTop - currentOffset;
|
||||||
|
nextOffset -= $highlighted.outerHeight(false) * 2;
|
||||||
|
|
||||||
|
if (currentIndex <= 2) {
|
||||||
|
this.$results.scrollTop(0);
|
||||||
|
} else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {
|
||||||
|
this.$results.scrollTop(nextOffset);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
return Results;
|
return Results;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
26
dist/js/select2.amd.js
vendored
26
dist/js/select2.amd.js
vendored
@ -333,6 +333,7 @@ define('select2/results',[
|
|||||||
self.$results.attr('aria-hidden', 'false');
|
self.$results.attr('aria-hidden', 'false');
|
||||||
|
|
||||||
self.setClasses();
|
self.setClasses();
|
||||||
|
self.ensureHighlightVisible();
|
||||||
});
|
});
|
||||||
|
|
||||||
container.on('close', function () {
|
container.on('close', function () {
|
||||||
@ -469,6 +470,31 @@ define('select2/results',[
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Results.prototype.ensureHighlightVisible = function () {
|
||||||
|
var $highlighted = this.$results.find('.highlighted');
|
||||||
|
|
||||||
|
if ($highlighted.length === 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var $options = this.$results.find('[aria-selected]');
|
||||||
|
|
||||||
|
var currentIndex = $options.index($highlighted);
|
||||||
|
|
||||||
|
var currentOffset = this.$results.offset().top;
|
||||||
|
var nextTop = $highlighted.offset().top;
|
||||||
|
var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);
|
||||||
|
|
||||||
|
var offsetDelta = nextTop - currentOffset;
|
||||||
|
nextOffset -= $highlighted.outerHeight(false) * 2;
|
||||||
|
|
||||||
|
if (currentIndex <= 2) {
|
||||||
|
this.$results.scrollTop(0);
|
||||||
|
} else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {
|
||||||
|
this.$results.scrollTop(nextOffset);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
return Results;
|
return Results;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
26
dist/js/select2.full.js
vendored
26
dist/js/select2.full.js
vendored
@ -9871,6 +9871,7 @@ define('select2/results',[
|
|||||||
self.$results.attr('aria-hidden', 'false');
|
self.$results.attr('aria-hidden', 'false');
|
||||||
|
|
||||||
self.setClasses();
|
self.setClasses();
|
||||||
|
self.ensureHighlightVisible();
|
||||||
});
|
});
|
||||||
|
|
||||||
container.on('close', function () {
|
container.on('close', function () {
|
||||||
@ -10007,6 +10008,31 @@ define('select2/results',[
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Results.prototype.ensureHighlightVisible = function () {
|
||||||
|
var $highlighted = this.$results.find('.highlighted');
|
||||||
|
|
||||||
|
if ($highlighted.length === 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var $options = this.$results.find('[aria-selected]');
|
||||||
|
|
||||||
|
var currentIndex = $options.index($highlighted);
|
||||||
|
|
||||||
|
var currentOffset = this.$results.offset().top;
|
||||||
|
var nextTop = $highlighted.offset().top;
|
||||||
|
var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);
|
||||||
|
|
||||||
|
var offsetDelta = nextTop - currentOffset;
|
||||||
|
nextOffset -= $highlighted.outerHeight(false) * 2;
|
||||||
|
|
||||||
|
if (currentIndex <= 2) {
|
||||||
|
this.$results.scrollTop(0);
|
||||||
|
} else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {
|
||||||
|
this.$results.scrollTop(nextOffset);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
return Results;
|
return Results;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
4
dist/js/select2.full.min.js
vendored
4
dist/js/select2.full.min.js
vendored
File diff suppressed because one or more lines are too long
26
dist/js/select2.js
vendored
26
dist/js/select2.js
vendored
@ -762,6 +762,7 @@ define('select2/results',[
|
|||||||
self.$results.attr('aria-hidden', 'false');
|
self.$results.attr('aria-hidden', 'false');
|
||||||
|
|
||||||
self.setClasses();
|
self.setClasses();
|
||||||
|
self.ensureHighlightVisible();
|
||||||
});
|
});
|
||||||
|
|
||||||
container.on('close', function () {
|
container.on('close', function () {
|
||||||
@ -898,6 +899,31 @@ define('select2/results',[
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Results.prototype.ensureHighlightVisible = function () {
|
||||||
|
var $highlighted = this.$results.find('.highlighted');
|
||||||
|
|
||||||
|
if ($highlighted.length === 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var $options = this.$results.find('[aria-selected]');
|
||||||
|
|
||||||
|
var currentIndex = $options.index($highlighted);
|
||||||
|
|
||||||
|
var currentOffset = this.$results.offset().top;
|
||||||
|
var nextTop = $highlighted.offset().top;
|
||||||
|
var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);
|
||||||
|
|
||||||
|
var offsetDelta = nextTop - currentOffset;
|
||||||
|
nextOffset -= $highlighted.outerHeight(false) * 2;
|
||||||
|
|
||||||
|
if (currentIndex <= 2) {
|
||||||
|
this.$results.scrollTop(0);
|
||||||
|
} else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {
|
||||||
|
this.$results.scrollTop(nextOffset);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
return Results;
|
return Results;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
2
dist/js/select2.min.js
vendored
2
dist/js/select2.min.js
vendored
File diff suppressed because one or more lines are too long
26
src/js/select2/results.js
vendored
26
src/js/select2/results.js
vendored
@ -183,6 +183,7 @@ define([
|
|||||||
self.$results.attr('aria-hidden', 'false');
|
self.$results.attr('aria-hidden', 'false');
|
||||||
|
|
||||||
self.setClasses();
|
self.setClasses();
|
||||||
|
self.ensureHighlightVisible();
|
||||||
});
|
});
|
||||||
|
|
||||||
container.on('close', function () {
|
container.on('close', function () {
|
||||||
@ -319,5 +320,30 @@ define([
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Results.prototype.ensureHighlightVisible = function () {
|
||||||
|
var $highlighted = this.$results.find('.highlighted');
|
||||||
|
|
||||||
|
if ($highlighted.length === 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var $options = this.$results.find('[aria-selected]');
|
||||||
|
|
||||||
|
var currentIndex = $options.index($highlighted);
|
||||||
|
|
||||||
|
var currentOffset = this.$results.offset().top;
|
||||||
|
var nextTop = $highlighted.offset().top;
|
||||||
|
var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);
|
||||||
|
|
||||||
|
var offsetDelta = nextTop - currentOffset;
|
||||||
|
nextOffset -= $highlighted.outerHeight(false) * 2;
|
||||||
|
|
||||||
|
if (currentIndex <= 2) {
|
||||||
|
this.$results.scrollTop(0);
|
||||||
|
} else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {
|
||||||
|
this.$results.scrollTop(nextOffset);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
return Results;
|
return Results;
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user