Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Przekazywanie nazwy funkcji w parametrze funkcji, obsługa sortowania
Apocalyptiq
post
Post #1





Grupa: Zarejestrowani
Postów: 230
Pomógł: 3
Dołączył: 8.01.2008

Ostrzeżenie: (10%)
X----


Robię sortowanie tabeli. Używam do tego JSowskiej funkcji sort z przypisaniem funkcji sortującej, wygląda to mniej więcej tak:

Kod
function sortByNumber(a,b){

return a-b;

}

var tablica=[5,2,64,34,2,3,64,3];

tablica.sort(sortByNumber);


No i takie coś ładnie działa. Tylko że ja mam nieco bardziej te funkcje rozbudowane, no i chcę sortować według kilku kolumn. Można jakoś w parametrze funkcji przekazać nazwę funkcji, żeby przemycić ją później jako parametr sort()? Chodzi mi o coś takiego:

Kod
function sortuj(obiekt,funkcja){

..... troche kodu przechwytywującego z obiektu elementy, które ma posortować - tworzy tablice z tymi elementami ....

tablica.sort(funkcja);

}


Takie coś mi nie działało (jak w argumencie podawałem albo funkcja, albo funkcja(), albo function funkcja() ). Jak takie coś uzyskać?



Wrzuciłem hamsko nazwe funkcji tak samo, jak podaje się w tym sort - i w FF takie coś działa, ale w Operze nie :/ Wie może ktoś co tutaj nie tak interpetuje Opera? I jak to naprawić? Może jakiś inny sposób sortowania zrobić, żeby też na operze działało (nie sort, a napisać własną taką funkcje)? Ale samo sort w operze działało, tylko że jak pokombinowałem z tym przekazywaniem nazwy funkcji jako parametr funkcji, w Operze JS przestalo działać :/

Ten post edytował Apocalyptiq 29.12.2008, 11:00:37
Go to the top of the page
+Quote Post
dyktek
post
Post #2





Grupa: Zarejestrowani
Postów: 240
Pomógł: 0
Dołączył: 18.01.2004
Skąd: rzeszów / kraków

Ostrzeżenie: (0%)
-----


nie wiem czy dobrze Cię zrozumiałem ale zrobiłem coś takiego:
  1. function sortByNumber(a,b){
  2.  
  3. return a-b;
  4.  
  5. }
  6.  
  7. var tablica = [5,2,64,34,2,3,64,3];
  8.  
  9. function sortuj( object, func ){
  10. object.sort( func );
  11. }
  12.  
  13. sortuj( tablica, sortByNumber );
  14.  
  15. alert( tablica );


i działa w operze, ff i ie
Go to the top of the page
+Quote Post
Apocalyptiq
post
Post #3





Grupa: Zarejestrowani
Postów: 230
Pomógł: 3
Dołączył: 8.01.2008

Ostrzeżenie: (10%)
X----


Mi chodzi o samo wrzucanie jako parametr funkcji - funkcję, coś mi w Operze to nie działało (na IE nawet nie sprawdzałem, ale nie musi tam działać). W FF, jeżeli mam jakieś problemy z JS - znacznie robote ułatwia mi Firebug, a w Operze... Odpaliłem w niej Firebug Lite, ale nie wyłapywał błędów JS. Opera ma jakąś swoją taką konsole - ale w niej za bardzo nie mogłem się odnaleźć, i nie widziałem tam nigdzie, żeby wywalała błędy JS. A w Operze to sortowanie nie działa mi tak, że w ogóle JS nie działa. Ale jeżeli wywale sortowanie - pozostałe funkcje JS na stronie ładnie działają. W FF sortowanie ładnie działa.
Może przedstawie jak to wygląda:
Kod
function sortByNumber(a,b){
    return parseInt($(a).find(".teamNumber").text())-parseInt($(b).find(".teamNumber").text());
}
function sortByNumberDesc(b,a){
    return parseInt($(a).find(".teamNumber").text())-parseInt($(b).find(".teamNumber").text());
}
function sortByName(a,b){
    return $(a).find(".teamName").text()>$(b).find(".teamName").text()?-1:1;;
}
function sortByNameDesc(b,a){
    return $(a).find(".teamName").text()>$(b).find(".teamName").text()?-1:1;;
}

function sortBy(by,desc){
    if(desc==undefined) desc=0;
    var trs=[];
    var n=0;
    $("#teams tbody tr").each(function(){
        trs[n]=this;
        n++;
    });
    switch(by){
        case 'value':
            if(desc==1) trs.sort(sortByValue); else trs.sort(sortByValueDesc);
            break;
        case 'league':
            if(desc==1) trs.sort(sortByLeague); else trs.sort(sortByLeagueDesc);
            break;
        case 'number':
            if(desc==1) trs.sort(sortByNumber); else trs.sort(sortByNumberDesc);
            break;
        case 'name':
            if(desc==1) trs.sort(sortByName); else trs.sort(sortByNameDesc);
            break;
    }
    for each(var tr in trs)
        $("#teams tbody").append(tr);
}
$(document).ready(function(){
    $("#teamsNumber").click().toggle(function(){
        sortBy('number');
    },function(){
        sortBy('number',1);
    });
    $("#teamsName").click().toggle(function(){
        sortBy('name');
    },function(){
        sortBy('name',1);
    });
});


Fajnie, jakby można to jakoś skrócić (żeby nie pisać osobnych sortować, do tego osobne dla odwrotnych), ale póki co nie działa to w Operze. Widzi ktoś tu może jakiś błąd?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 25.08.2025 - 06:49