Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przekazywanie nazwy funkcji w parametrze funkcji
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
Apocalyptiq
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ć :/
dyktek
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
Apocalyptiq
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?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.