9 Окт
Плагин Sortable - один из нескольких плагинов, входящих в состав jQuery UI, с помощью которых можно организовать взаимодействие с элементами веб-станиц. Плагин Sortable предоставляет возможность организовать сортировку элементов, перемещая их с помощью указателя мыши.
Читаем, и пробуем проделать все это самостоятельно.
Для начала посетим страницу настраиваемой закачки на сайте jQuery UI, чтобы получить необходимые нам файлы. Щелкаем на ссылке Deselect all component, чтобы не закачивать лишнее, а затем выбираем только то, что нам потребуется - отмечаем чекбокс Sortable и видим, что вместе с ним отметились чекбоксы UI Core и Draggable. Работа плагина Sortable зависит от них, поэтому они необходимы.
Кроме этого, справа есть выпадающий список, где можно выбрать понравившуюся тему оформления. Если все готово, кликаем кнопку Download и получаем архив.
Сначала в разделе HEAD подключаем несколько файлов, которые есть в архиве:
<link type="text/css" href="css/sunny/jquery-ui-1.7.2.custom.css" rel="stylesheet" />
<script src="js/jquery-1.3.2.min.js" type="text/javascript"></script>
<script src="js/jquery-ui-1.7.2.custom.min.js" type="text/javascript"></script>
Здесь мы подключили файл стилей css/sunny/jquery-ui-1.7.2.custom.css одной из многочисленных тем оформления. Хотите использовать Ваше собственное оформление - пожалуйста, но в примере мы используем готовое. Кроме этого мы подключили файл библиотеки – js/jquery-1.3.2.min.js и файл js/jquery-ui-1.7.2.custom.min.js, в котором объединена функциональность ядра UI и плагинов Sortable и Draggable.
Смотрим HTML-разметку. Пусть у нас она будет выглядеть так:
<ul id="sortable">
<li class="ui-state-default">Item 1</li>
<li class="ui-state-default">Item 2</li>
<li class="ui-state-default">Item 3</li>
<li class="ui-state-default">Item 4</li>
<li class="ui-state-default">Item 5</li>
<li class="ui-state-default">Item 6</li>
<li class="ui-state-default">Item 7</li>
</ul>
и следующий javascript-код, который применит к выбранному элементу функциональность плагина Sortable.
$(function(){ $("#sortable").sortable(); });
В этом примере мы использовали плагин с настройками по умолчанию, но поскольку его можно очень гибко настраивать с помощью большого количества различных опций, то обязательно надо познакомиться с тем, как это делается. В следующем примере мы передадим плагину пару опций.
$(function(){ $("#sortable").sortable({ placeholder: "ui-state-highlight", opacity: 0.6 }); });
Опция placeholder передает плагину имя css-класса, который будет применен к той позиции, откуда элемент начал перемещение (или куда он может быть помещен), а опция opacity устанавливает прозрачность элемента во время перемещения. Значения остальных опций передаются плагину подобным образом.
appendTo - по умолчанию эта опция имеет значение 'parent'. В ней можно передать селектор jQuery или элемент, который будет использован в качестве контейнера для объекта, представляющего сортируемый элемент во время его перемещения.
axis - в качестве значения используется строка. Доступные значения 'x' или 'y'. По умолчанию установлено false. Если определить эту опцию, сортируемые элементы смогут перемещаться только по вертикали или горизонтали.
cancel - в качестве значения используется селектор jQuery. Предотвращает сортировку, если она начинается на элементе, указанном в это опции. По умолчанию используется значение ':input,button'.
connectWith - в качестве значения принимает селектор jQuery, где можно указать другой сортируемый список, в который можно будет перемещать сортируемые элементы, таким образом, что они станут частью другого сортируемого списка.
containment - ограничивает перемещение внутри определенного элемента или области. В качестве значения может принимать селектор jQuery, элемент или строку. Примеры возможных значений: 'parent', 'document', 'window'. По умолчанию – false.
cursor - строка, определяющая вид курсора в процессе перемещения элемента. По умолчанию установлено значение 'auto'.
cursorAt - объект, который определяет положение указателя мыши во время перемещения элемента. Для задания координат используется комбинация одного или двух свойств из четырех возможных - 'top', 'right', 'bottom' и 'left'. Например: {top: 10, left: 20} или {bottom: 5}. По умолчанию – false.
delay - число, указанное в этой опции, определяет отсрочку начала перемещения элемента. Указывается в миллисекундах. Опция помогает предотвратить нежелательное перемещение элемента во время случайного щелчка мышью. По умолчанию используется значение 0.
distance - число в пикселах, определяющее расстояние, которое должен пройти указатель мыши (с одновременно нажатой левой клавишей), чтобы начался процесс перемещения элемента. Опция помогает предотвратить нежелательное перемещение элемента во время случайного щелчка мышью. По умолчанию используется значение 1.
dropOnEmpty - по умолчанию используется значение true. В этом случае, если один из связанных списков пустой, в него можно перемещать элементы из другого списка. Если установить значение false, эта возможность будет запрещена.
grid - по умолчанию – false. Значением может быть массив из двух чисел, определяющий шаг сетки, по которой будет перемещаться сортируемый элемент. Например: grid: [20,20]
handle - по умолчанию установлено значение false. В качестве значения можно указать селектор jQuery или элемент. В этом случае процесс сортировки можно будет начать только в том случае, если левая клавиша мыши нажата в момент нахождения указателя мыши над элементом, определенным в этой опции.
helper - по умолчанию используется значение 'original'. В этом случае, при сортировке, перемещаемый элемент представлен самим элементом. Другое возможное значение 'clone'. В этом случае элемент при перемещении представлен своей копией.
items - в качестве значения используется селектор jQuery. По умолчанию установлено значение '> *'. Опция определяет, какие элементы, являющиеся элементами-потомками того элемента, с которым связана функциональность плагина, могут быть сортируемыми.
opacity - значение опции может изменяться от 0.01 до 1 и определяет прозрачность перемещаемого элемента. По умолчанию – false.
placeholder - имя css-класса, который будет применен к той позиции, откуда элемент начал перемещение. Если значение опции не определено «пустая» позиция никак не оформляется.
revert - по умолчанию используется значение false. Если использовать значение true, то при перемещении элемента, после того, как будет отпущена клавиша мыши, элемент переместится на свою новую позицию с использованием плавного анимационного эффекта.
scroll - по умолчанию установлено значение true – при перемещении элемента к краю области просмотра, она автоматически прокручивается бесконечно. Если установить значение false, эта возможность будет запрещена.
scrollSensitivity - число, определяющее расстояние в пикселах от края области просмотра, после которого она начинает прокручиваться. Расстояние определяется относительно указателя мыши, а не перемещаемого элемента. По умолчанию установлено значение 20.
scrollSpeed - число, определяющее скорость, с которой прокручивается область просмотра при приближении указателя мыши к ее краю на расстояние определенное в опции scrollSensitivity. По умолчанию установлено значение 20.
tolerance - по умолчанию эта опция имеет значение 'intersect'. При этом элемент, перемещаемый во время сортировки должен перекрыть любой другой сортируемый элемент как минимум на 50%, чтобы тот «освободил» занимаемое место. Другое возможное значение - 'pointer'. При этом над сортируемым элементом должен оказаться только указатель мыши.
zIndex - число, которое определяет значение css-свойства z-index для элемента в момент его сортировки.
Настало время познакомиться с событиями, на которые умеет реагировать плагин Sortable. Пример использования одного из возможных событий плагина приведен в следующем примере:
$(function(){ $("#sortable").sortable({ placeholder: "ui-state-highlight", opacity: 0.6, stop: function(event, ui) { alert(event.type); } }); });
Здесь мы использовали только опцию stop, в которой определили функцию, которая будет вызвана в момент окончания сортировки. Функция может принимать два аргумента. Первый аргумент – объект события, второй – специальный объект ui, в свойствах которого можно обнаружить разнообразную полезную информацию. Но в приведенном примере мы используем только свойство type объекта события, чтобы вывести в окне предупреждения название события, вызвавшего нашу функцию.
А вот пример того, как можно использовать специальный объект ui:
$(function(){ $("#sortable").sortable({ placeholder: "ui-state-highlight", opacity: 0.6, helper: "clone", change: function(event, ui) { ui.helper.css("color","#f00"); } }); });
Мы использовали опцию change, чтобы вызвать функцию в момент изменения положения сортируемого элемента. Внутри функции мы обращаемся к одному из свойств объекта ui – к свойству helper. Это свойство является объектом, который представляет перемещаемый элемент во время сортировки. Используя метод css(name,value) мы устанавливаем красный цвет шрифта на перемещаемом элементе. Но, как только этот элемент займет свое новое место в списке, цвет шрифта вернется к исходному значению. Догадались почему? Если нет, то обратите внимание на опцию helper. Установив значение clone в этой опции, мы использовали во время перемещения не сам исходный объект, а его копию.
Кстати, helper – это не единственное полезное свойство объекта ui, есть и другие:
ui.helper – объект, характеризующий элемент, находящийся в процессе перемещения;
ui.position – объект, в свойствах top и left которого содержится информация о положении перемещаемого элемента относительно родительского элемента;
ui.offset – объект, в свойствах top и left которого содержится информация об абсолютном положении перемещаемого элемента;
ui.item – объект, представляющий сортируемый элемент;
ui.placeholder – объект, представляющий место, откуда был перемещен сортируемый элемент (или куда он будет перемещен);
ui.sender – объект, который представляет элемент-контейнер для сортируемых элементов, откуда сортируемый элемент был перемещен (при использовании связанных списков);
Ниже перечислены опции, связанные с событиями плагина Sortable, их довольно много:
Опция start - событие sortstart наступает в момент начала сортировки.
Опция sort - событие sort наступает постоянно в течение сортировки.
Опция change - событие sortchange наступает во время сортировки, но только в том случае, если изменилось положение сортируемого элемента в объектной модели документа.
Опция beforeStop - событие sortbeforeStop наступает в момент сортировки, перед ее окончанием (когда отпущена левая клавиша мыши).
Опция stop - событие sortstop наступает в момент окончания сортировки.
Опция update - событие sortupdate наступает в момент окончания сортировки, но только в том случае, если порядок сортируемых элементов был изменен.
Опция receive - событие sortreceive наступает, когда связанный сортируемый список принимает элемент из другого списка.
Опция remove - событие sortremove наступает, когда элемент покидает один связанный список, и перемещается в другой.
Опция over - событие sortover наступает, когда сортируемый элемент перемещен в связанный список.
Опция out - событие sortout наступает, когда сортируемый элемент перемещен из связанного списка.
Опция activate - событие sortactivate наступает при использовании связанных списков, для каждого связанного списка при начале процесса сортировки.
Опция deactivate - событие sortdeactivate наступает при использовании связанных списков, для каждого связанного списка при окончании процесса сортировки.
А теперь - методы плагина. С помощью методов можно управлять плагином после инициализации. Сначала добавим кнопочку в HTML-разметку:
<button id="cancelSort">Cancel Sort</button>
и небольшой пример:
$(function(){ $("#sortable").sortable({ placeholder: "ui-state-highlight", opacity: 0.6 }); $("#cancelSort").click(function(){ $("#sortable").sortable("cancel"); }); });
Метод .sortable("cancel") использованный в примере, один из самых полезных методов плагина. Он позволяет отменить результат последней операции сортировки и вернуть элементы к предшествующему состоянию.
Обратите внимание на элемент button с идентификатором #cancelSort. С кнопкой связан обработчик события click, по которому и вызывается метод соответствующий метод.
Если Вы попробуете переместить один из элементов с писка на новое место, а затем нажать на кнопку cancelSort, список вернется в предыдущее состояние.
Но конечно, этот метод не единственный. Вот другие:
destroy - .sortable('destroy') полностью удаляет всю функциональность плагина Sortable. Возвращает элементы в состояние, предшествующее инициализации.
disable - .sortable('disable') временно запрещает использование всей функциональности плагина. Вновь разрешить ее использование можно с помощью метода enable.
enable - .sortable('enable') разрешает использование всей функциональности плагина, если ранее она была запрещена с использованием метода disable.
option - .sortable('option', optionName, [value]) с помощью этого метода можно получить или установить значение любой опции плагина после инициализации.
serialize - .sortable('serialize', [option]) упорядочивает значение атрибутов id элементов сортируемого списка в строку, которую можно передать на сервер с помощью ajax-запроса. Предъявляет требования к формату записи значения атрибута id. Допустимые форматы: id='name_number' или id='name-number'. В этом случае вид строки получается 'name[]=number& name[]=number'. Вторым, необязательным параметром, можно передать объект. Возможные значения: 'key' – заменит часть 'name[]' на необходимую Вам, 'attribute' – попробует получить значения из атрибута, отличного от id, 'expression' – можно использовать свое регулярное выражение.
toArray - .sortable('toArray') упорядочивает значение атрибутов id элементов сортируемого списка в массив.
cancel - .sortable('cancel') отменяет результат последней операции сортировки и возвращает элемент в состояние, предшествующее этой операции. Метод полезен при использовании в callback-функциях, связанных с событиями stop или receive.
Ну, и "на сладкое" - конечно обязательно надо дать пример использования связанных списков.
$(function(){ $("#sortable1, #sortable2").sortable({ connectWith: ".connectedSortable", tolerance: "pointer" }); });
Я привел пример только javascript-кода, поскольку в HTML-коде страницы ничего особенного нет – просто два ненумерованных списка #sortable1 и #sortable2. С помощью javascript-кода мы сделаем их сортируемыми, указав их идентификаторы в селекторе jQuery и связав с ними функциональность Sortable. Самое главное заключается в использовании опции connectWith. Здесь мы указываем имя класса для того списка, который хотим сделать связанным с другим списком.
Обратите внимание, что атрибут class со значением connectedSortable мы присвоили обоим спискам и добились того, что элементы могут перемещаться не только из первого списка во второй, но и наоборот. Если бы мы захотели организовать только «одностороннее движение», скажем из первого списка во второй, мы бы присвоили класс connectedSortable только второму списку.
Теперь сортируемые элементы можно переносить из одного списка в другой и элемент, перемещенный из одного списка в другой, становится частью другого списка.
Все примеры, использованные в статье, можно совершенно запросто получить в этом архиве.
Отзывов (74) на «jQuery UI - плагин Sortable»
Если бы плагин сохранял выставленный порядок элементов, например в куках, можно было бы использовать на сайтах. А так больше на игрушку похоже.
MAX, у кого есть руки, голова и немного знаний в ней, тот без особых проблем сможет это проделать…
P.S. Вы на свой счет не принимайте, чтобы обиды не получилось, ок?
Да нет проблем.
Но в силу небольшого опыта работы с jQuery, как раз и возник вопрос. Как всё-таки сохранять и (главное) восстанавливать состояние сортировки с помощью куков? Практическое применение: на сайте виджеты можно сортировать в пределах своего сайдбара. Просетитель, возвращается и видит туже последовательность.
Есть небольшой, но полезный плагин - jQuery Cookie. Он поможет.
Помогите ктото с данным примером, как правильно сохранить в куках местоположение кнопок без кнопки которая устанавливает куки!
Местоположение кнопок??? Или все-таки порядок отсортированных элементов? Если второе, то используйте какое-либо событие плагина, например stop (при окончании сортировки), в нем пишите функцию, которая сохранит новый порядок сортировки в куках.
З.Ы. Если первое, то ес-но тоже надо использовать какое-либо событие, вместо клика по кнопке…
нужно именно местоположение, что бы просто переставил, а оно само в куках сохранилось, пока пока перестановка работает вот так
$(document).ready(function(){
$(”#sortmenu”).sortable({
revert: true,
});
});
Да кстати просто и доволи красиво передвигается, если отодвинуть в сторону то плавно возвращается, не резко как на примере, осталось тока что б сохранялось местоположение перестановки.
Можно маленький примерчик?
напишите кто может, у кого больше познаний, плизз!
Да примерчик-то можно. Только не помогут Вам тут cookie - очень сложно будет восстанавливать порядок сортировки….
Вот пример как ставить cookie
$("#sortable").sortable({ revert: true, stop: function(){ var pos = new Array(); $(this).children().each(function(){ pos.push($(this).attr("name")); }); //alert(pos.join(",")); $.cookie("sort", pos.join(",")); } });кроме этого в каждом li списка используйте атрибут name (или какой другой), откуда можно понять начальный номер этого элемента. Например n1, n2, n3 и так далее.
Да, и конечно подключить плагин jquery.cookie.js
Cookie Вы сохраните, а дальше? А дальше практически тупик. Тут надо сохранять не порядок сортировки, а top и left каждого элемента. Тогда при обновлении страницы можно поставить каждый элемент в положение, запомненное в cookie.
Но только не советую делать это совместно с Sortable - запаритесь… С какими-либо элементами - на здоровье, получится проще простого.
Вывод: порядок сортировки элементов сохраняйте на сервере в БД, при обновлении страницы выбираете из БД отсортированный список.
При даном коде вообще список изчезает!
Подскажите, возможно ли сделать подобное с тремя списками? Пробовал тупо добавить третий - не получилось…
Извиняюсь, не углядел, работает и с тремя списками!
Женя, Вы правда думаете, что я вот так код Вам из головы и выложил? Нет, конечно. Набросал у себя и проверил. И только потом выложил его в комменте
Возник такой вопрос: а как собственно можно получить новый порядок элементов? Например в виде строки типа:
“name[]=newnumber&name[]=newnumber”
Пробовал через serialize, не прокатило. оно тупо возвращает id, прибавляя к name “[]”,а number остается таким же, какой был задан в id.
rame0, чуть внимательнее читайте - метод предъявляет к формату записи id свои требования. Или new_number, или new-number.
Вот например:
есть список, где каждый элемент li имеет id ->> id1_1, id1_2, id1_3,…id1_7.
Мы взяли li с id1_7 (последний li) и поставили его первым. Метод serialize() вернет такую строку:
id1[]=7&id1[]=1&id1[]=2&id1[]=3 … &id1[]=6
Ну, и все… Дальше на сервер…
Gennady,
Это я понял. Мне просто было интересно, может ли этот плагин сам менять нумерацию элементов списка. Допустим есть список:
Ставим id4_4 вверх. Вызываем serialize (или что то другое) и, на выходе, получаем такую запись:
id4[]=1&id1[]=2&id2[]=3&id3[]=4
Так то в том чтобы разобрать на сервере строку которую выдает serialize нет ни чего сложного, просто не очень хочется :))
[b]Gennady[/b] нет я не думаю конечно, это у меня просто так получилось, я то конечно ничего никого не виню
Подскажите, можно ли сделать чтоб перемещались строки таблицы таким же образом?
ставь классы или строкам или рядам, и всёёё будет работать!
если для li написать position:relative в опере начинает глючить - после перетаскивания элемента он появляется в очень неожиданных местах!.. в мозиле всё норм.
пысы. проверял в опере 10 и фф 3.5
проблему решил так:
text
хе. скрипт порезался
[li][div style=”position:relative”]text[/div][/li]
за статью спасиб. голову поломал, пока нашел описание объекта ui
=)
Нумс, кто нибудь смог записать все это дело в куки и восстановить порядок расположения, после обновления страницы? )
To SandWicH: записать в cookie проще простого. Восстанавливать порядок сортированных элементов - лучше даже не начинать.
Если уж есть такая задача - то решать только через запись нового порядка элементов в БД…
Сайт на uCoz ) С БД не получится…
Gennady, если не тяжело, напиши следующюю статью о том как с помощью php, mysql, jquery, можно было бы всё это организовать то что хотят здесь люби, заранее будем все благодарны
Пока что сам поломаю мозг, но поддержу авторов комментов, было бы неплохо сделать запоминание и востановление из куков порядка.
2Gennady,
как считаете, много ума и сноровки надо чтоб прикрутить этот плагин к treeview? =)
навскидку… на сколько это считаете возможным?
Ума и сноровки понадобится наверное немало. Только зачем изобретать то, что уже есть? Навскидку вот тут:
http://azatoth.net/filetree/
А вообще, при наличии свободного времени можно покопаться тут:
http://plugins.jquery.com/
То что, кто-то может код выложить что бы это всё фиксировать?
Может кто подскажет, у меня при
$(’#sort’).sortable(’toArray’) выдает неопределенный массив везде одни undefined=undefined и т.д.
Метод работает только при наличии атрибутов id у элементов списка. Вы проверьте, они есть у Вас?
Спасибо понял !
Простите, что пишу не по теме, но та страничка уже закрыта:( http://www.linkexchanger.su/2008/39.html - это как раз то, что нужно, но почему-то при использрвании вторго варианта (через php-файл) вместо данных из текстового файла autocomplete.dat (базы данных) в списке для выбора появляется php-код из файла, кот. должен данные из базы возвращать, то есть вместо чего-то вроде 1:Пашковский:Краснодарский край:43,0 выходит
header(’Content-Type: text/html; charset=utf-8′);.
Еще раз прош прощения за офф-топ
Сиё обычно означает, что на сервере отсутствует php-интерпретатор…
спасибо! вот я тупица:)
А можно ли в каком-либо событии этого плагина получить сведения об изменении: например, что я переместил элемент с 3 позиции на 7 (на мой беглый взгляд больше подходит update, но я там такого в параметрах не увидел)? Или для подобной работы самому придётся писать обработчики для start/stop (если да, то это я знаю как).
А никто не знает как можно решить такую проблему - у меня есть два списка, которые соединены друг с дургом при помощи connectWith. Но мне нужно сделать так, чтобы при перетаскивании обьектов из первого списка во второй они появлялись во втором списке, но не исчезали в первом.
To Alex:
Насколько помню - helper: ‘clone’
To zandroid:
Именно в update (случай, когда изменения произошли) и надо прописать callback-функцию, которая будет делать то, что требуется…
Вопрос-то был, собственно, в том, как получить эти номера: откуда куда (две позиции) был перемещён элемент. Т.к. обработать перемещение одного элемента в БД проще, чем весь список сразу, + ещё экономия в объёме передаваемых на сервер данных.
“To Alex:
Насколько помню - helper: ‘clone’ ”
Ну судя по описанию - да, однако на практике разницы нет. Я может чего не так делаю… Выглядит все это у меня так:
$(function(){
$(”#sortable, #sortable2, #sortable3, #sortable4″).sortable({
connectWith: “.connectedSortable”,
tolerance: “pointer”,
helper: “clone”
To Alex:
Решается здесь несколько иначе, вот примерно так:
$(function(){ $("#sortable1 li, #sortable2 li").draggable({ connectToSortable: '.connectedSortable', helper: 'clone', revert: 'invalid' }); $("#sortable1, #sortable2").sortable({ revert: true }); });To zandroid:
Думаю, что проще (да и в конечном итоге выгоднее) воспользоваться готовым методом .sortable(”toArray”) например.
Просто взявшись писать свой обработчик для update, Вы скорее всего выгадаете немного (если вообще выгадаете). Попробуйте потерзать объект ui, может и выйдет что-то оригинальное.
в объекте ui ничего подходящего не нашёл, и никак не могу найти подробную инфу по параметру event. Может я не совсем понятно объяснил задачу? Смысл в следующем: на сервере есть метод “Переставить(нач.позиция, конечн.позиция)”, которая выполняет всего один sql-запрос для синхронизации порядка элементов с перемещениями на клиентской стороне. И для передачи параметров этой функции я вижу только такое решение: запомнить порядковую позицию в событии start и отправить ajax-запрос со старой и новой позицией из события update, т.к. в событии update нет возможности получить старый порядковый номер элемента.
а по поводу выгоды: это хорошо, если в списке до 10 элементов. а если там 100 или больше, то 2 числа отправить на сервер явно выгоднее, чем массив из 100 идентификаторов.
Gennady, спасибо большое, все заработало.
To zandroid:
Да в общем никто и не спорит, что передать два числа выгоднее… Вопрос в том, сколько для этого понаписать придется…
event - это объект события, доступный в функции обработчике события.
Дальше - в принципе идея с использованием пары start/update вполне логична. Вы хотите от меня кода? Если время вечерком выкрою, то попробую…
Подскажите, а как мне узнать например id который находится в [li] у перемещаемого объекта?
Просто. Выбрать событие по которому будет вызываться функция, получающая значение атрибута id в нужный момент.
Предположим, что нам нужно получить это значение в момент окончания сортировки, если положение элемента изменилось. Тогда в таком духе:
$("#sortable").sortable({ update: function(e,ui){ alert(ui.item.attr('id')); } });т.е. использовали опцию update в которой определили callback-функцию, использующую объект ui, свойство item которого тоже объект, представляющий перемещенный элемент.
Gennady, спасибо большое, очень помогли!
Уважаемые сайтожители и хозяин дома. Обращаюсь к вам с проблемой sortable вложенных списков. Пошарил в интернете и нашел только еще одного бедолагу, который мается подобной проблемой. Бедолага выложил пример траблы:
www faggrupper dk / sortable html
Точки я, с вашего разрешения убрал.
При использовании сортировки во вложенных списках, перетаскивание элементов вложенного списка в IE производится неправильно.
Фокс, опера и хром справились на ура, а Эксплорер все похерил.
Для просмотра ошибки достаточно потянуть за SubItem 1
Да… “Бедолага” задал вопрос в дискуссиях по UI jQuery еще 23 ноября, но что-то ему никто отвечать не торопится.
Т.е. проблема действительно есть, но с наскока у меня тоже ничего не получилось. Можно немного пободаться с помощью опций и немного улучшить ситуацию, чтобы уж совсем все не “разлеталось”, но это не то конечно…
$(function(){ $("#sortable").sortable({ items: 'li', containment: 'parent' }); $("#sortable2").sortable({ containment: 'parent' }); });тут видимо надо глубже копать…
Спасибо вам большое, у вас хороший блог. Но всё-таки хотелось бы иметь пример в связке с php. Нашел решение на другом ресурсе:
<li id=”recordsArray_”>
<?php
require(”db.php”);
$action = $_POST[’action’];
$updateRecordsArray = $_POST[’recordsArray’];
if ($action == “updateRecordsListings”){
$listingCounter = 1;
foreach ($updateRecordsArray as $recordIDValue) {
$query = “UPDATE records SET recordListingID = ” . $listingCounter . ” WHERE recordID = ” . $recordIDValue;
mysql_query($query) or die(’Error, insert query failed’);
$listingCounter = $listingCounter + 1;
}
echo ”;
print_r($updateRecordsArray);
echo ”;
echo ‘If you refresh the page, you will see that records will stay just as you modified.’;
}
?>
$(document).ready(function(){
$(function() {
$(”#contentLeft ul”).sortable({ opacity: 0.6, cursor: ‘move’, update: function() {
var order = $(this).sortable(”serialize”) + ‘&action=updateRecordsListings’;
$.post(”updateDB.php”, order, function(theResponse){
$(”#contentRight”).html(theResponse);
});
}
});
});
});
Функция:
$(function() {
$(”#contentLeft ul”).sortable({ opacity: 0.6, cursor: ‘move’, update: function() {
var order = $(this).sortable(”serialize”) + ‘&action=updateRecordsListings’;
$.post(”updateDB.php”, order, function(theResponse){
$(”#contentRight”).html(theResponse);
});
}
});
});
Здравствуйте.. Скажи пожалуйста как сделать так, чтобы в блоке можно было выделять текст…
Сделал чтобы сортировка была только по вертикали, сделал distance 20, то что-то все равно нельзя….
Пытаюсь копировать текст в этом блоке и блок ехать начинает)
Можно решить просто. Есть такая опция handle. Смысл ее в чем? Если взять разметку из примера в этой статье, добавить внутрь всех li скажем, картинку img и указать ее в этой опции, то перемещать сортируемый элемент будет можно только “ухватив” его именно за эту картинку.
Gennady, можно ли сделать наоборот не чтобы только в .handle можно было перемещать, а допустим…..блин…
Есть див в котором еще 5 дивов с классами..
так вот перемещается див, но я не хочу чтобы он перемещался если его цепляют за классы b и d…
Очень надо
Можно и так. Только надо внимательно подойти к составлению селектора. Помните из описания опции:
“В качестве значения можно указать селектор jQuery или элемент. “
Пррсто надо так составить выражение в селекторе jQuery, чтобы туда попали только те элементы, за которые “таскать” можно.
Как можно в handle указать более 1 класса?
$(function(){ $("#sortable").sortable({ handle: $('div.b, div.a'), revert: true }); });Если внутри li есть элементы div с классом a и классом b, то “таскать” можно будет за них и только за них. За все остальное - нет.
Не получается использовать метод refresh. Где бы я его не вызывал - реакции - 0, хотя enable и disable прекрасно работают. Никак не могу понять в чем трабла.
Все, разобрался. Проблема была в неправильном создании новых элементов.
Весьма интересная штуковина. Спасибо! Воспользуюсь обязательно
Gennady, помогите пожалуйста решить проблемку…
http://vpleer.ru/?q=Gabriel+%26+Dresden
Нельзя копировать текст композиции… она двигаться начинает.. Сделать выше как вы говорили не получается…не так классы используются (firebug видит)
Разница непринципиальная, поскольку вопрос только в том, какой селектор указать в опции handle:
Можно попробовать такой $(’div:not(div.songname)’)
Он выберет все div за исключением div’а с классом songname и следовательно, “таскать” li можно будет за все, кроме того самого div’а в котором содержится текст внутри ссылки.
Ну, разве что еще задать ему небольшой padding с помощью стилей, чтобы можно было “попасть” указателем, чтобы выделить текст…
Есть ли возможность программной сортировки помимо drag`n`drop? Например, при сворачивании блока автоматом добавлять его в конец списка. Сделать сам могу, но может как-то у плагина предусмотрено.
Здравствуйте!
Если знаете ответ
Передаю данные для таблицы в виде
“aaData”: [
[ “q0″, “w0″, “e0″, “r0″, “t0″, “y0″ ],
[ “q1″, “w1″, “e1″, “r1″, “t1″, “y1″ ],
…
[ “qN”, “wN”, “eN”, “rN”, “tN”, “yN” ]
];
если в данных есть ключевые слова, ссылки, и т.п,
- индексируются они гуглом?
Хочу отметить, что если в данных есть картинки,
а таблица пагинируется, подгружаются только видимые файлы, остальные - помере перелистывания.
_____
Спасибо!
Сорри, вопрос выше касается плагина DataTables
Тем не менее - актуален.
Роботы ПС не выполняют JS-код, поэтому все данные, которые Вы добавляете с помощью JS им “не видны”.
To Юриус:
… при сворачивании блока автоматом добавлять его в конец списка…
Не очень ясно про какой блок речь?
А вообще виджет создан именно для drag’n'drop сортировки.
Обсуждение статьи можно продолжить на форуме jQuery.