mirror of
https://github.com/jquery/jquery-ui.git
synced 2024-11-21 11:04:24 +00:00
Selectable: Proper handling of inner scrolling
Fixes #13359 Closes gh-1570
This commit is contained in:
parent
2e770153c5
commit
a240251b36
@ -57,11 +57,16 @@ return $.widget( "ui.selectable", $.ui.mouse, {
|
|||||||
|
|
||||||
// Cache selectee children based on filter
|
// Cache selectee children based on filter
|
||||||
this.refresh = function() {
|
this.refresh = function() {
|
||||||
|
that.elementPos = $( that.element[ 0 ] ).offset();
|
||||||
that.selectees = $( that.options.filter, that.element[ 0 ] );
|
that.selectees = $( that.options.filter, that.element[ 0 ] );
|
||||||
that._addClass( that.selectees, "ui-selectee" );
|
that._addClass( that.selectees, "ui-selectee" );
|
||||||
that.selectees.each( function() {
|
that.selectees.each( function() {
|
||||||
var $this = $( this ),
|
var $this = $( this ),
|
||||||
pos = $this.offset();
|
selecteeOffset = $this.offset(),
|
||||||
|
pos = {
|
||||||
|
left: selecteeOffset.left - that.elementPos.left,
|
||||||
|
top: selecteeOffset.top - that.elementPos.top
|
||||||
|
};
|
||||||
$.data( this, "selectable-item", {
|
$.data( this, "selectable-item", {
|
||||||
element: this,
|
element: this,
|
||||||
$element: $this,
|
$element: $this,
|
||||||
@ -94,6 +99,7 @@ return $.widget( "ui.selectable", $.ui.mouse, {
|
|||||||
options = this.options;
|
options = this.options;
|
||||||
|
|
||||||
this.opos = [ event.pageX, event.pageY ];
|
this.opos = [ event.pageX, event.pageY ];
|
||||||
|
this.elementPos = $( this.element[ 0 ] ).offset();
|
||||||
|
|
||||||
if ( this.options.disabled ) {
|
if ( this.options.disabled ) {
|
||||||
return;
|
return;
|
||||||
@ -183,19 +189,25 @@ return $.widget( "ui.selectable", $.ui.mouse, {
|
|||||||
|
|
||||||
this.selectees.each( function() {
|
this.selectees.each( function() {
|
||||||
var selectee = $.data( this, "selectable-item" ),
|
var selectee = $.data( this, "selectable-item" ),
|
||||||
hit = false;
|
hit = false,
|
||||||
|
offset = {};
|
||||||
|
|
||||||
//prevent helper from being selected if appendTo: selectable
|
//prevent helper from being selected if appendTo: selectable
|
||||||
if ( !selectee || selectee.element === that.element[ 0 ] ) {
|
if ( !selectee || selectee.element === that.element[ 0 ] ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
offset.left = selectee.left + that.elementPos.left;
|
||||||
|
offset.right = selectee.right + that.elementPos.left;
|
||||||
|
offset.top = selectee.top + that.elementPos.top;
|
||||||
|
offset.bottom = selectee.bottom + that.elementPos.top;
|
||||||
|
|
||||||
if ( options.tolerance === "touch" ) {
|
if ( options.tolerance === "touch" ) {
|
||||||
hit = ( !( selectee.left > x2 || selectee.right < x1 || selectee.top > y2 ||
|
hit = ( !( offset.left > x2 || offset.right < x1 || offset.top > y2 ||
|
||||||
selectee.bottom < y1 ) );
|
offset.bottom < y1 ) );
|
||||||
} else if ( options.tolerance === "fit" ) {
|
} else if ( options.tolerance === "fit" ) {
|
||||||
hit = ( selectee.left > x1 && selectee.right < x2 && selectee.top > y1 &&
|
hit = ( offset.left > x1 && offset.right < x2 && offset.top > y1 &&
|
||||||
selectee.bottom < y2 );
|
offset.bottom < y2 );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( hit ) {
|
if ( hit ) {
|
||||||
|
Loading…
Reference in New Issue
Block a user