Sıralanabilir bir listedeki konumu değiştiğinde bir öğenin hangi konumda olduğunu nasıl izlerim?
Yanıtlar:
Sen kullanabilirsiniz ui
özellikle istediğiniz, olaylara verilen nesneyi stop
olayı , ui.item
mülk ve .index()
bunun gibi,:
$("#sortable").sortable({
stop: function(event, ui) {
alert("New position: " + ui.item.index());
}
});
Burada çalışan bir demo görebilirsiniz , .index()
değerin sıfır tabanlı olduğunu unutmayın , bu nedenle görüntüleme amacıyla + 1'lemek isteyebilirsiniz.
sort
kullanabilirsiniz ui.placeholder.index
. Endeks 1. pozisyonda başlıyor
Başlangıç pozisyonunu nerede saklayacağımdan tam olarak emin değildim, bu yüzden David Boikes yorumunu detaylandırmak istiyorum. Bu değişkeni ui.item nesnesinin kendisinde depolayabileceğimi ve şu şekilde durdurma işlevinde alabileceğimi buldum:
$( "#sortable" ).sortable({
start: function(event, ui) {
ui.item.startPos = ui.item.index();
},
stop: function(event, ui) {
console.log("Start position: " + ui.item.startPos);
console.log("New position: " + ui.item.index());
}
});
start
olabileceğinin gerçekten farkında stop
değildim.
Durdurmak yerine güncellemeyi kullan
http://api.jqueryui.com/sortable/
güncelleme (etkinlik, kullanıcı arabirimi)
Tür: sortupdate
Bu olay, kullanıcı sıralamayı durdurduğunda ve DOM konumu değiştiğinde tetiklenir.
.
durdur (olay, kullanıcı arabirimi)
Tür: sıralartop
Bu olay, sıralama durduğunda tetiklenir. olay türü: olay
Kod parçası:
<script type="text/javascript">
var sortable = new Object();
sortable.s1 = new Array(1, 2, 3, 4, 5);
sortable.s2 = new Array(1, 2, 3, 4, 5);
sortable.s3 = new Array(1, 2, 3, 4, 5);
sortable.s4 = new Array(1, 2, 3, 4, 5);
sortable.s5 = new Array(1, 2, 3, 4, 5);
sortingExample();
function sortingExample()
{
// Init vars
var tDiv = $('<div></div>');
var tSel = '';
// ul
for (var tName in sortable)
{
// Creating ul list
tDiv.append(createUl(sortable[tName], tName));
// Add selector id
tSel += '#' + tName + ',';
}
$('body').append('<div id="divArrayInfo"></div>');
$('body').append(tDiv);
// ul sortable params
$(tSel).sortable({connectWith:tSel,
start: function(event, ui)
{
ui.item.startPos = ui.item.index();
},
update: function(event, ui)
{
var a = ui.item.startPos;
var b = ui.item.index();
var id = this.id;
// If element moved to another Ul then 'update' will be called twice
// 1st from sender list
// 2nd from receiver list
// Skip call from sender. Just check is element removed or not
if($('#' + id + ' li').length < sortable[id].length)
{
return;
}
if(ui.sender === null)
{
sortArray(a, b, this.id, this.id);
}
else
{
sortArray(a, b, $(ui.sender).attr('id'), this.id);
}
printArrayInfo();
}
}).disableSelection();;
// Add styles
$('<style>')
.attr('type', 'text/css')
.html(' body {background:black; color:white; padding:50px;} .sortableClass { clear:both; display: block; overflow: hidden; list-style-type: none; } .sortableClass li { border: 1px solid grey; float:left; clear:none; padding:20px; }')
.appendTo('head');
printArrayInfo();
}
function printArrayInfo()
{
var tStr = '';
for ( tName in sortable)
{
tStr += tName + ': ';
for(var i=0; i < sortable[tName].length; i++)
{
// console.log(sortable[tName][i]);
tStr += sortable[tName][i] + ', ';
}
tStr += '<br>';
}
$('#divArrayInfo').html(tStr);
}
function createUl(tArray, tId)
{
var tUl = $('<ul>', {id:tId, class:'sortableClass'})
for(var i=0; i < tArray.length; i++)
{
// Create Li element
var tLi = $('<li>' + tArray[i] + '</li>');
tUl.append(tLi);
}
return tUl;
}
function sortArray(a, b, idA, idB)
{
var c;
c = sortable[idA].splice(a, 1);
sortable[idB].splice(b, 0, c);
}
</script>
Jquery sıralanabilir kullanıcı arayüzünün resmi belgelerine göre: http://api.jqueryui.com/sortable/#method-toArray
Güncelleme olayında. kullanım:
var sortedIDs = $( ".selector" ).sortable( "toArray" );
ve bu değişkeni uyarır veya konsolide ederseniz (sıralanmışID'ler). Sıranı alacaksın. Doğru cevap ise lütfen "Doğru Cevap" olarak seçin.