Sortable Widgetversion added: 1.0
Description: Reorder elements in a list or grid using the mouse.
The jQuery UI Sortable plugin makes selected elements sortable by dragging with the mouse.
Note: In order to sort table rows, the tbody
must be made sortable, not the table
.
Options
appendToType: jQuery or Element or Selector or String
"parent"
- jQuery: A jQuery object containing the element to append the helper to.
- Element: The element to append the helper to.
- Selector: A selector specifying which element to append the helper to.
-
String: The string
"parent"
will cause the helper to be a sibling of the sortable item.
Initialize the sortable with the appendTo option specified:
$( ".selector" ).sortable({ appendTo: document.body }); |
Get or set the appendTo option, after initialization:
// getter var appendTo = $( ".selector" ).sortable( "option" , "appendTo" ); // setter $( ".selector" ).sortable( "option" , "appendTo" , document.body ); |
axisType: String
false
"x"
, "y"
.Initialize the sortable with the axis option specified:
$( ".selector" ).sortable({ axis: "x" }); |
Get or set the axis option, after initialization:
// getter var axis = $( ".selector" ).sortable( "option" , "axis" ); // setter $( ".selector" ).sortable( "option" , "axis" , "x" ); |
cancelType: Selector
":input,button"
Initialize the sortable with the cancel option specified:
$( ".selector" ).sortable({ cancel: "a,button" }); |
Get or set the cancel option, after initialization:
// getter var cancel = $( ".selector" ).sortable( "option" , "cancel" ); // setter $( ".selector" ).sortable( "option" , "cancel" , "a,button" ); |
connectWithType: Selector
false
connectWith
option must be set on both sortable elements.Initialize the sortable with the connectWith option specified:
$( ".selector" ).sortable({ connectWith: "#shopping-cart" }); |
Get or set the connectWith option, after initialization:
// getter var connectWith = $( ".selector" ).sortable( "option" , "connectWith" ); // setter $( ".selector" ).sortable( "option" , "connectWith" , "#shopping-cart" ); |
containmentType: Element or Selector or String
false
Defines a bounding box that the sortable items are contrained to while dragging.
Note: The element specified for containment must have a calculated width and height (though it need not be explicit). For example, if you have float: left
sortable children and specify containment: "parent"
be sure to have float: left
on the sortable/parent container as well or it will have height: 0
, causing undefined behavior.
- Element: An element to use as the container.
- Selector: A selector specifying an element to use as the container.
-
String: A string identifying an element to use as the container. Possible values:
"parent"
,"document"
,"window"
.
Initialize the sortable with the containment option specified:
$( ".selector" ).sortable({ containment: "parent" }); |
Get or set the containment option, after initialization:
// getter var containment = $( ".selector" ).sortable( "option" , "containment" ); // setter $( ".selector" ).sortable( "option" , "containment" , "parent" ); |
cursorType: String
"auto"
Initialize the sortable with the cursor option specified:
$( ".selector" ).sortable({ cursor: "move" }); |
Get or set the cursor option, after initialization:
// getter var cursor = $( ".selector" ).sortable( "option" , "cursor" ); // setter $( ".selector" ).sortable( "option" , "cursor" , "move" ); |
cursorAtType: Object
false
{ top, left, right, bottom }
.Initialize the sortable with the cursorAt option specified:
$( ".selector" ).sortable({ cursorAt: { left: 5 } }); |
Get or set the cursorAt option, after initialization:
// getter var cursorAt = $( ".selector" ).sortable( "option" , "cursorAt" ); // setter $( ".selector" ).sortable( "option" , "cursorAt" , { left: 5 } ); |
delayType: Integer
0
Initialize the sortable with the delay option specified:
$( ".selector" ).sortable({ delay: 150 }); |
Get or set the delay option, after initialization:
// getter var delay = $( ".selector" ).sortable( "option" , "delay" ); // setter $( ".selector" ).sortable( "option" , "delay" , 150 ); |
disabledType: Boolean
false
true
.Initialize the sortable with the disabled option specified:
$( ".selector" ).sortable({ disabled: true }); |
Get or set the disabled option, after initialization:
// getter var disabled = $( ".selector" ).sortable( "option" , "disabled" ); // setter $( ".selector" ).sortable( "option" , "disabled" , true ); |
distanceType: Number
1
Initialize the sortable with the distance option specified:
$( ".selector" ).sortable({ distance: 5 }); |
Get or set the distance option, after initialization:
// getter var distance = $( ".selector" ).sortable( "option" , "distance" ); // setter $( ".selector" ).sortable( "option" , "distance" , 5 ); |
dropOnEmptyType: Boolean
true
false
, items from this sortable can't be dropped on an empty connect sortable (see the connectWith
option.Initialize the sortable with the dropOnEmpty option specified:
$( ".selector" ).sortable({ dropOnEmpty: false }); |
Get or set the dropOnEmpty option, after initialization:
// getter var dropOnEmpty = $( ".selector" ).sortable( "option" , "dropOnEmpty" ); // setter $( ".selector" ).sortable( "option" , "dropOnEmpty" , false ); |
forceHelperSizeType: Boolean
false
true
, forces the helper to have a size.Initialize the sortable with the forceHelperSize option specified:
$( ".selector" ).sortable({ forceHelperSize: true }); |
Get or set the forceHelperSize option, after initialization:
// getter var forceHelperSize = $( ".selector" ).sortable( "option" , "forceHelperSize" ); // setter $( ".selector" ).sortable( "option" , "forceHelperSize" , true ); |
forcePlaceholderSizeType: Boolean
false
Initialize the sortable with the forcePlaceholderSize option specified:
$( ".selector" ).sortable({ forcePlaceholderSize: true }); |
Get or set the forcePlaceholderSize option, after initialization:
// getter var forcePlaceholderSize = $( ".selector" ).sortable( "option" , "forcePlaceholderSize" ); // setter $( ".selector" ).sortable( "option" , "forcePlaceholderSize" , true ); |
gridType: Array
false
[ x, y ]
.Initialize the sortable with the grid option specified:
$( ".selector" ).sortable({ grid: [ 20, 10 ] }); |
Get or set the grid option, after initialization:
// getter var grid = $( ".selector" ).sortable( "option" , "grid" ); // setter $( ".selector" ).sortable( "option" , "grid" , [ 20, 10 ] ); |
handleType: Selector or Element
false
Initialize the sortable with the handle option specified:
$( ".selector" ).sortable({ handle: ".handle" }); |
Get or set the handle option, after initialization:
// getter var handle = $( ".selector" ).sortable( "option" , "handle" ); // setter $( ".selector" ).sortable( "option" , "handle" , ".handle" ); |
helperType: String or Function()
"original"
-
String: If set to
"clone"
, then the element will be cloned and the clone will be dragged. - Function: A function that will return a DOMElement to use while dragging. The function receives the event and the element being sorted.
Initialize the sortable with the helper option specified:
$( ".selector" ).sortable({ helper: "clone" }); |
Get or set the helper option, after initialization:
// getter var helper = $( ".selector" ).sortable( "option" , "helper" ); // setter $( ".selector" ).sortable( "option" , "helper" , "clone" ); |
itemsType: Selector
"> *"
Initialize the sortable with the items option specified:
$( ".selector" ).sortable({ items: "> li" }); |
Get or set the items option, after initialization:
// getter var items = $( ".selector" ).sortable( "option" , "items" ); // setter $( ".selector" ).sortable( "option" , "items" , "> li" ); |
opacityType: Number
false
0.01
to 1
.Initialize the sortable with the opacity option specified:
$( ".selector" ).sortable({ opacity: 0.5 }); |
Get or set the opacity option, after initialization:
// getter var opacity = $( ".selector" ).sortable( "option" , "opacity" ); // setter $( ".selector" ).sortable( "option" , "opacity" , 0.5 ); |
placeholderType: String
false
Initialize the sortable with the placeholder option specified:
$( ".selector" ).sortable({ placeholder: "sortable-placeholder" }); |
Get or set the placeholder option, after initialization:
// getter var placeholder = $( ".selector" ).sortable( "option" , "placeholder" ); // setter $( ".selector" ).sortable( "option" , "placeholder" , "sortable-placeholder" ); |
revertType: Boolean or Number
false
-
Boolean: When set to
true
, the items will animate with the default duration. - Number: The duration for the animation, in milliseconds.
Initialize the sortable with the revert option specified:
$( ".selector" ).sortable({ revert: true }); |
Get or set the revert option, after initialization:
// getter var revert = $( ".selector" ).sortable( "option" , "revert" ); // setter $( ".selector" ).sortable( "option" , "revert" , true ); |
scrollType: Boolean
true
Initialize the sortable with the scroll option specified:
$( ".selector" ).sortable({ scroll: false }); |
Get or set the scroll option, after initialization:
// getter var scroll = $( ".selector" ).sortable( "option" , "scroll" ); // setter $( ".selector" ).sortable( "option" , "scroll" , false ); |
scrollSensitivityType: Number
20
Initialize the sortable with the scrollSensitivity option specified:
$( ".selector" ).sortable({ scrollSensitivity: 10 }); |
Get or set the scrollSensitivity option, after initialization:
// getter var scrollSensitivity = $( ".selector" ).sortable( "option" , "scrollSensitivity" ); // setter $( ".selector" ).sortable( "option" , "scrollSensitivity" , 10 ); |
scrollSpeedType: Number
20
scrollSensitivity
distance.Initialize the sortable with the scrollSpeed option specified:
$( ".selector" ).sortable({ scrollSpeed: 40 }); |
Get or set the scrollSpeed option, after initialization:
// getter var scrollSpeed = $( ".selector" ).sortable( "option" , "scrollSpeed" ); // setter $( ".selector" ).sortable( "option" , "scrollSpeed" , 40 ); |
toleranceType: String
"intersect"
-
"intersect"
: The item overlaps the other item by at least 50%. -
"pointer"
: The mouse pointer overlaps the other item.
Initialize the sortable with the tolerance option specified:
$( ".selector" ).sortable({ tolerance: "pointer" }); |
Get or set the tolerance option, after initialization:
// getter var tolerance = $( ".selector" ).sortable( "option" , "tolerance" ); // setter $( ".selector" ).sortable( "option" , "tolerance" , "pointer" ); |
zIndexType: Integer
1000
Initialize the sortable with the zIndex option specified:
$( ".selector" ).sortable({ zIndex: 9999 }); |
Get or set the zIndex option, after initialization:
// getter var zIndex = $( ".selector" ).sortable( "option" , "zIndex" ); // setter $( ".selector" ).sortable( "option" , "zIndex" , 9999 ); |
Methods
cancel()
- This method does not accept any arguments.
Invoke the cancel method:
$( ".selector" ).sortable( "cancel" ); |
destroy()
- This method does not accept any arguments.
Invoke the destroy method:
$( ".selector" ).sortable( "destroy" ); |
disable()
- This method does not accept any arguments.
Invoke the disable method:
$( ".selector" ).sortable( "disable" ); |
enable()
- This method does not accept any arguments.
Invoke the enable method:
$( ".selector" ).sortable( "enable" ); |
option( optionName )Returns: Object
optionName
.-
optionNameType: StringThe name of the option to get.
Invoke the method:
var isDisabled = $( ".selector" ).sortable( "option" , "disabled" ); |
option()Returns: PlainObject
- This method does not accept any arguments.
Invoke the method:
var options = $( ".selector" ).sortable( "option" ); |
option( optionName, value )
optionName
.-
optionNameType: StringThe name of the option to set.
-
valueType: ObjectA value to set for the option.
Invoke the method:
$( ".selector" ).sortable( "option" , "disabled" , true ); |
option( options )
-
optionsType: ObjectA map of option-value pairs to set.
Invoke the method:
$( ".selector" ).sortable( "option" , { disabled: true } ); |
refresh()
- This method does not accept any arguments.
Invoke the refresh method:
$( ".selector" ).sortable( "refresh" ); |
refreshPositions()
- This method does not accept any arguments.
Invoke the refreshPositions method:
$( ".selector" ).sortable( "refreshPositions" ); |
serialize( options )Returns: String
Serializes the sortable's item id
s into a form/ajax submittable string. Calling this method produces a hash that can be appended to any url to easily submit a new item order back to the server.
It works by default by looking at the id
of each item in the format "setname_number"
, and it spits out a hash like "setname[]=number&setname[]=number"
.
Note: If serialize returns an empty string, make sure the id
attributes include an underscore. They must be in the form: "set_number"
For example, a 3 element list with id
attributes "foo_1"
, "foo_5"
, "foo_2"
will serialize to "foo[]=1&foo[]=5&foo[]=2"
. You can use an underscore, equal sign or hyphen to separate the set and number. For example "foo=1"
, "foo-1"
, and "foo_1"
all serialize to "foo[]=1"
.
-
optionsType: ObjectOptions to customize the serialization.
-
key (default:
the part of the attribute in front of the separator
)Type: StringReplacespart1[]
with the specified value. -
attribute (default:
"id"
)Type: StringThe name of the attribute to use for the values. -
expression (default:
/(.+)[-=_](.+)/
)Type: RegExpA regular expression used to split the attribute value into key and value parts.
-
Invoke the serialize method:
var sorted = $( ".selector" ).sortable( "serialize" , { key: "sort" } ); |
toArray()Returns: Array
- This method does not accept any arguments.
Invoke the toArray method:
var sortedIDs = $( ".selector" ).sortable( "toArray" ); |
widget()Returns: jQuery
jQuery
object containing the sortable element.
- This method does not accept any arguments.
Invoke the widget method:
var widget = $( ".selector" ).sortable( "widget" ); |
Events
activate( event, ui )Type: sortactivate
-
eventType: Event
-
uiType: Object
-
helperType: jQueryThe jQuery object representing the helper being sorted
-
itemType: jQueryThe jQuery object representing the current dragged element
-
offsetType: ObjectThe current absolute position of the helper represented as
{ top, left }
-
positionType: ObjectThe current position of the helper represented as
{ top, left }
-
originalPositionType: ObjectThe original position of the element represented as
{ top, left }
-
senderType: jQueryThe sortable that the item comes from if moving from one sortable to another
-
Initialize the sortable with the activate callback specified:
$( ".selector" ).sortable({ activate: function ( event, ui ) {} }); |
Bind an event listener to the sortactivate event:
$( ".selector" ).on( "sortactivate" , function ( event, ui ) {} ); |
beforeStop( event, ui )Type: sortbeforestop
-
eventType: Event
-
uiType: Object
-
helperType: jQueryThe jQuery object representing the helper being sorted
-
itemType: jQueryThe jQuery object representing the current dragged element
-
offsetType: ObjectThe current absolute position of the helper represented as
{ top, left }
-
positionType: ObjectThe current position of the helper represented as
{ top, left }
-
originalPositionType: ObjectThe original position of the element represented as
{ top, left }
-
senderType: jQueryThe sortable that the item comes from if moving from one sortable to another
-
Initialize the sortable with the beforeStop callback specified:
$( ".selector" ).sortable({ beforeStop: function ( event, ui ) {} }); |
Bind an event listener to the sortbeforestop event:
$( ".selector" ).on( "sortbeforestop" , function ( event, ui ) {} ); |
change( event, ui )Type: sortchange
-
eventType: Event
-
uiType: Object
-
helperType: jQueryThe jQuery object representing the helper being sorted
-
itemType: jQueryThe jQuery object representing the current dragged element
-
offsetType: ObjectThe current absolute position of the helper represented as
{ top, left }
-
positionType: ObjectThe current position of the helper represented as
{ top, left }
-
originalPositionType: ObjectThe original position of the element represented as
{ top, left }
-
senderType: jQueryThe sortable that the item comes from if moving from one sortable to another
-
Initialize the sortable with the change callback specified:
$( ".selector" ).sortable({ change: function ( event, ui ) {} }); |
Bind an event listener to the sortchange event:
$( ".selector" ).on( "sortchange" , function ( event, ui ) {} ); |
create( event, ui )Type: sortcreate
Initialize the sortable with the create callback specified:
$( ".selector" ).sortable({ create: function ( event, ui ) {} }); |
Bind an event listener to the sortcreate event:
$( ".selector" ).on( "sortcreate" , function ( event, ui ) {} ); |
deactivate( event, ui )Type: sortdeactivate
-
eventType: Event
-
uiType: Object
-
helperType: jQueryThe jQuery object representing the helper being sorted
-
itemType: jQueryThe jQuery object representing the current dragged element
-
offsetType: ObjectThe current absolute position of the helper represented as
{ top, left }
-
positionType: ObjectThe current position of the helper represented as
{ top, left }
-
originalPositionType: ObjectThe original position of the element represented as
{ top, left }
-
senderType: jQueryThe sortable that the item comes from if moving from one sortable to another
-
Initialize the sortable with the deactivate callback specified:
$( ".selector" ).sortable({ deactivate: function ( event, ui ) {} }); |
Bind an event listener to the sortdeactivate event:
$( ".selector" ).on( "sortdeactivate" , function ( event, ui ) {} ); |
out( event, ui )Type: sortout
-
eventType: Event
-
uiType: Object
-
helperType: jQueryThe jQuery object representing the helper being sorted
-
itemType: jQueryThe jQuery object representing the current dragged element
-
offsetType: ObjectThe current absolute position of the helper represented as
{ top, left }
-
positionType: ObjectThe current position of the helper represented as
{ top, left }
-
originalPositionType: ObjectThe original position of the element represented as
{ top, left }
-
senderType: jQueryThe sortable that the item comes from if moving from one sortable to another
-
Initialize the sortable with the out callback specified:
$( ".selector" ).sortable({ out: function ( event, ui ) {} }); |
Bind an event listener to the sortout event:
$( ".selector" ).on( "sortout" , function ( event, ui ) {} ); |
over( event, ui )Type: sortover
-
eventType: Event
-
uiType: Object
-
helperType: jQueryThe jQuery object representing the helper being sorted
-
itemType: jQueryThe jQuery object representing the current dragged element
-
offsetType: ObjectThe current absolute position of the helper represented as
{ top, left }
-
positionType: ObjectThe current position of the helper represented as
{ top, left }
-
originalPositionType: ObjectThe original position of the element represented as
{ top, left }
-
senderType: jQueryThe sortable that the item comes from if moving from one sortable to another
-
Initialize the sortable with the over callback specified:
$( ".selector" ).sortable({ over: function ( event, ui ) {} }); |
Bind an event listener to the sortover event:
$( ".selector" ).on( "sortover" , function ( event, ui ) {} ); |
receive( event, ui )Type: sortreceive
-
eventType: Event
-
uiType: Object
-
helperType: jQueryThe jQuery object representing the helper being sorted
-
itemType: jQueryThe jQuery object representing the current dragged element
-
offsetType: ObjectThe current absolute position of the helper represented as
{ top, left }
-
positionType: ObjectThe current position of the helper represented as
{ top, left }
-
originalPositionType: ObjectThe original position of the element represented as
{ top, left }
-
senderType: jQueryThe sortable that the item comes from if moving from one sortable to another
-
Initialize the sortable with the receive callback specified:
$( ".selector" ).sortable({ receive: function ( event, ui ) {} }); |
Bind an event listener to the sortreceive event:
$( ".selector" ).on( "sortreceive" , function ( event, ui ) {} ); |
remove( event, ui )Type: sortremove
-
eventType: Event
-
uiType: Object
-
helperType: jQueryThe jQuery object representing the helper being sorted
-
itemType: jQueryThe jQuery object representing the current dragged element
-
offsetType: ObjectThe current absolute position of the helper represented as
{ top, left }
-
positionType: ObjectThe current position of the helper represented as
{ top, left }
-
originalPositionType: ObjectThe original position of the element represented as
{ top, left }
-
senderType: jQueryThe sortable that the item comes from if moving from one sortable to another
-
Initialize the sortable with the remove callback specified:
$( ".selector" ).sortable({ remove: function ( event, ui ) {} }); |
Bind an event listener to the sortremove event:
$( ".selector" ).on( "sortremove" , function ( event, ui ) {} ); |
sort( event, ui )Type: sort
-
eventType: Event
-
uiType: Object
-
helperType: jQueryThe jQuery object representing the helper being sorted
-
itemType: jQueryThe jQuery object representing the current dragged element
-
offsetType: ObjectThe current absolute position of the helper represented as
{ top, left }
-
positionType: ObjectThe current position of the helper represented as
{ top, left }
-
originalPositionType: ObjectThe original position of the element represented as
{ top, left }
-
senderType: jQueryThe sortable that the item comes from if moving from one sortable to another
-
Initialize the sortable with the sort callback specified:
$( ".selector" ).sortable({ sort: function ( event, ui ) {} }); |
Bind an event listener to the sort event:
$( ".selector" ).on( "sort" , function ( event, ui ) {} ); |
start( event, ui )Type: sortstart
-
eventType: Event
-
uiType: Object
-
helperType: jQueryThe jQuery object representing the helper being sorted
-
itemType: jQueryThe jQuery object representing the current dragged element
-
offsetType: ObjectThe current absolute position of the helper represented as
{ top, left }
-
positionType: ObjectThe current position of the helper represented as
{ top, left }
-
originalPositionType: ObjectThe original position of the element represented as
{ top, left }
-
senderType: jQueryThe sortable that the item comes from if moving from one sortable to another
-
Initialize the sortable with the start callback specified:
$( ".selector" ).sortable({ start: function ( event, ui ) {} }); |
Bind an event listener to the sortstart event:
$( ".selector" ).on( "sortstart" , function ( event, ui ) {} ); |
stop( event, ui )Type: sortstop
-
eventType: Event
-
uiType: Object
-
helperType: jQueryThe jQuery object representing the helper being sorted
-
itemType: jQueryThe jQuery object representing the current dragged element
-
offsetType: ObjectThe current absolute position of the helper represented as
{ top, left }
-
positionType: ObjectThe current position of the helper represented as
{ top, left }
-
originalPositionType: ObjectThe original position of the element represented as
{ top, left }
-
senderType: jQueryThe sortable that the item comes from if moving from one sortable to another
-
Initialize the sortable with the stop callback specified:
$( ".selector" ).sortable({ stop: function ( event, ui ) {} }); |
Bind an event listener to the sortstop event:
$( ".selector" ).on( "sortstop" , function ( event, ui ) {} ); |
update( event, ui )Type: sortupdate
-
eventType: Event
-
uiType: Object
-
helperType: jQueryThe jQuery object representing the helper being sorted
-
itemType: jQueryThe jQuery object representing the current dragged element
-
offsetType: ObjectThe current absolute position of the helper represented as
{ top, left }
-
positionType: ObjectThe current position of the helper represented as
{ top, left }
-
originalPositionType: ObjectThe original position of the element represented as
{ top, left }
-
senderType: jQueryThe sortable that the item comes from if moving from one sortable to another
-
Initialize the sortable with the update callback specified:
$( ".selector" ).sortable({ update: function ( event, ui ) {} }); |
Bind an event listener to the sortupdate event:
$( ".selector" ).on( "sortupdate" , function ( event, ui ) {} ); |
Example:
A simple jQuery UI Sortable.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <!doctype html> < html lang = "en" > < head > < meta charset = "utf-8" > < title >sortable demo</ title > </ head > < body > < ul id = "sortable" > < li >Item 1</ li > < li >Item 2</ li > < li >Item 3</ li > < li >Item 4</ li > < li >Item 5</ li > </ ul > < script >$("#sortable").sortable();</ script > </ body > </ html > |