Do sortowania używam jquery poprzez przesuwanie zdjęć, pozycję tych zdjęć zapisuję do tablicy -> a potem do bazy danych.
Po pobraniu do danego zdjęcia do wartości value jest przypisywana wartość poprzednio zapisana.
Problem polega na samym sortowaniu ponieważ zdjęcia nie wyświetlają się w kolejności jaka jest w tablicy.
Sortowanie jest po value, w nim mam liczby i wg sortu wartość value="25" jest mniejsza niż value="9" dlatego pokazuje mi złą kolejność. Jak mogę to zmienić aby wartości np. 0 - 40 były sortowane poprawnie a nie 0,1,10,11, ....
Cały skrypt z opisem znajduje się tutaj
TUTAJ.
U mnie odczyt kolejności pobierany jest z bazy
var kolejnosc = $("#sort_wstaw").val(); if(kolejnosc != ''){ //wyciągamy informację z ciasteczka i deserializujemy alert(kol); for(var j=0;j<kol.length;j++){ //ustawiamy value elementom wg. tego jaką kolejność powinny zajmować $('#'+kol[j]).attr('value','z'+j); } //sortujemy na podstawie value $('.foto').qsort({attr: "value"});
parametry są przekazywane w porządku z sortowaniem nie mogę sobie poradzić.
Zamieszczam jeszcze skrypt do samego sortowania:
(function(jQuery) { $.fn.qsort = function(o) { qlog = function(m) { if(window.console && console.log) { console.log(m); }else { alert(m); } }; { var store=begin; var ptr; for(ptr=begin; ptr<end-1; ++ptr) { ++store; } } return store; }; { if(end-1>begin) { } }; { }; }; function convertToLower(arr) { igAr.push(this.toString().toLowerCase()); }); return igAr; }; var defaults = { order: "asc", attr: "value", ignoreCase: false, digits: false }; o = $.extend(defaults, o); try{ var i = 0; elems.push($(this)); var v = $(this).attr(o.attr); if(o.digits == true) { v = parseInt(v); } oldValues.push(v); values.push(v); }); if(o.ignoreCase == true) { values = convertToLower(values); oldValues = convertToLower(oldValues); } quick_sort(values); var loc = -1; if(o.digits==true) { loc = $.inArray(parseInt(this.toString()), oldValues); }else { loc = $.inArray(this.toString(), oldValues); } sortedElems.push(elems[loc]); oldValues[loc] = null; }); if(o.order == "desc") { for(i = 0; i < oldValues.length - 1; i++) { $(sortedElems[i]).before($(sortedElems[i+1])); } }else { for(i = 0; i < oldValues.length - 1; i++) { $(sortedElems[i]).after($(sortedElems[i+1])); } } return $(this); }catch(e) { qlog("qsort says: There was an error while selecting elements or the options."); } } })(jQuery);
Proszę o pomoc w rozwiązaniu problemu
EDIT:
Temat do zamknięcia, skrypt traktował value jako string a nie int dlatego tak sortował.
W zamieszczonym kodzie w var defults {} wystarczy zmienić
digits: false na -> digits: true