Avatar billede hypofysen Nybegynder
13. januar 2011 - 23:49 Der er 15 kommentarer og
1 løsning

kan jquery placeres i en alm. javascript function?

kan nedenstående sættes ind i en alm javascript function

eks.

function test(id)
{
  $(function() {
      $( "#slider-range-min" ).slider({
  ............
  })
}


        $(function() {
            $( "#slider-range-min" ).slider({
                range: "min",
                value: 10,
                min: 0,
                max: 100,
                slide: function( event, ui ) {
                    $( "#amount" ).val( ui.value + "%" );
                    $(".slider-range-min").css({
                        opacity: ui.value / 100,
                        color: 'red'
                      });
                   
                },
                stop: function( event, ui ) {
                    $( "#amount" ).val( ui.value + "%" );
                    //alert(ui.value);
                    test(this.id,ui.value);
                }
               
            });
            $( "#amount" ).val( $( "#slider-range-min" ).slider( "value" ) + "%" );
        });
Avatar billede softspot Forsker
14. januar 2011 - 00:17 #1
Umiddelbart kan det jo godt lade sig gøre. Jeg vil dog mene at du skal kalde funktionen test inden dokumentet er loadet (dvs. før eventet $(document).ready kaldes), ellers vil funktionens indhold givetvis ikke rigtig have nogen berettigelse. Dette er dog en teoretisk betragtning, så du må teste det i praksis for at se om min hypotese holder stik :-)

Hvad er det du skal opnå ved denne indpakning af koden?
Avatar billede hypofysen Nybegynder
14. januar 2011 - 08:31 #2
Det er fordi jeg har en fil der skal kalde funktionerne

kaldfunktion.js som kan indeholder

test('2','4','4');
test('3','1','5');
test('2','2','6');
test('1','3','7');

I dette eksempel skal de fire test kalde funktionen der laver mine slides så jeg får fire slides.

de to id'er + value skal så være parameterne

function test(id)
{
  $(function(id,id1,val) {
      $( id ).slider({
  ............
  })
}
Avatar billede hypofysen Nybegynder
14. januar 2011 - 08:33 #3
der skulle selvfølgelig stå:

function test(id,id1,val)
{
  $(function() {
      $( id ).slider({
  ............
  })
}
Avatar billede softspot Forsker
14. januar 2011 - 08:54 #4
Umiddelbart ville jeg jo mene det var nemt for dig blot at prøve det og se om det fungerer... Så derfor må jeg antage du spørger fordi du oplever udfordringer med det, eller hvad?

Det eneste jeg lige kan se du skal være opmærksom på er, at din funtion (test) bliver kaldt inden dokumentet er loadet færdig, men ellers burde det fungere således, at du får tilknyttet document-objektet et antal load-handlers svarende til det antal gange du kalder test-funktionen. Disse udføres så i sekvens på load-tidspunktet (givetvis i en vilkårlig rækkefølge, så jeg ville være forsigtig med at gøre nogle antagelser i den forbindelse).
Avatar billede heinzdmx Nybegynder
14. januar 2011 - 09:43 #5
softspot: hvorfor før documentet er loadet færdig?

Dette manipulere jo ved et slide så derfor skal det vel først køres ved $(document).ready(function() { });
Avatar billede softspot Forsker
14. januar 2011 - 10:02 #6
Ja, men det test-funktionen gør, med kaldene til $(document).ready(function() {}) (eller den korte form som du benytter $(funciton(){})), er, at definere hvilke handlinger der skal udføres idet dokumentet meddeler at det er loadet færdig. Efter denne hændelse er koden som sådan "død", da dokumentet antageligt kun loader én gang før næste sideindlæsning. Ikke dermed sagt at koden som er kørt er død, men selve opsætningen af dine slideres vil ikke ske igen på et senere tidspunkt, hvis de er knyttet til onload-handleren.

Det er muligt der ligger mere i dit spørgsmål, men så må du uddybe hvad du forventer, da det ellers er lidt svært at vurdere om det du rent faktisk  vil (hvis det ikke kun er et spørgsmål om hvorvidt du kan kalde noget onload-kode i en funktion), kan lade sig gøre :-)
Avatar billede intenz Novice
14. januar 2011 - 13:13 #7
Det kan sagtens lade sig gøre, men din struktur er ikke korrekt (som også nævnes af andre).

Dit 'slider' funktionskald kan du sagtens lægge ind i et alm. funktion. Men din window.onload funktion kan/bør du ikke. Den skal _kun_ bruges til at sætte de kald op som skal køres umiddelbart når siden hentes.

Din window.onload funktion er i jquery den samme som $(function(){});

Den samme forklaring med din kode:
// din slider funktion
function test(id)
{
            $( "#slider-range-min" ).slider({
                range: "min",
                value: 10,
                min: 0,
                max: 100,
                slide: function( event, ui ) {
                    $( "#amount" ).val( ui.value + "%" );
                    $(".slider-range-min").css({
                        opacity: ui.value / 100,
                        color: 'red'
                      });
                   
                },
                stop: function( event, ui ) {
                    $( "#amount" ).val( ui.value + "%" );
                    //alert(ui.value);
                    test(this.id,ui.value);
                }
               
            });
            $( "#amount" ).val( $( "#slider-range-min" ).slider( "value" ) + "%" );
}

// window.onload. Alt hvad der skal køres når siden er hentet skal lægge heri.
$(function() {
  test(24); // kør f.eks. din test funktion.
});
Avatar billede softspot Forsker
14. januar 2011 - 13:38 #8
Rettelse til mit indlæg (#6). Jeg havde ikke registreret at det ikke var den oprindelige spørger der skrev, så svaret er formuleret lidt hen over heinzdmx's hoved - beklager! :-)

@intenz: Det er ikke umiddelbart det jeg siger. Strukturen som som sådan gyldig nok, men den er måske lidt mindre indlysende end den du foreslår. Forskellen på den du skitserer og så den hypofysen selv lægger op til er, at hypofysens erklærer et antal eventhandlers som, antageligt, udføres i vilkårlig rækkefølge på load-tidspunktet, hvor den du skitserer, erklærer én eventhandler som udføres på load-tidspunktet. Din giver en sikkerhed for at tingene udføres i en bestemt sekvens, mens sekvensen i hypofysens egen metode er lidt mere usikker... men ellers burde de begge fungere.

Med hypofysens eget foreslag vil man "nemt" kunne fristes til at kalde test-funktionen på et vilkårligt tidspunkt EFTER load-eventet, hvilket ikke ville bringe meget lykke, mens din implementering givetvis også ville fungere i denne situation.

Derfor må jeg erklære mig enig i, at din version, intenz, er mindre risikabel og fremtidssikker end hypofysens egen. Men hvis det med garanti kan siges, at koden blot skal ske ved load-hændelsen, så er hypofysens lige så korrekt som din (iflg. min opfattelse af hvordan disse handler-bindinger fungerer).
Avatar billede softspot Forsker
14. januar 2011 - 13:39 #9
Ehm... jeg mente naturligvis "mindre risikabel og mere fremtidssikker" :D
Avatar billede intenz Novice
14. januar 2011 - 14:31 #10
#8. Mit svar var mere rettet mod spørger :) Men jeg er ikke helt enig i det du skriver.

Strukturen er muligvis gyldig nok, og vil formegentlig også virke (hvis den benyttes korrekt, som du også nævner).

"Men hvis det med garanti kan siges, at koden blot skal ske ved load-hændelsen, så er hypofysens lige så korrekt som din"

Mjaa, men kun fordi den også vil virke.

At lægge window.onload eventen inde i en funktion er ekstremt dårlig praksis og kan kun lede til problemer. Det øger kompleksiteten, besværliggør vedligeholde af koden og mindsker 'code reusability', da den uss case man kan bruge funktionen på er meget begrænset.

Generelt vil jeg sige, at onload eventen bør ligge i det globale scope (som i min kode), med mindre man er bevidst omkring hvorfor man har fravalgt det. Hvis man vil lave den slags 'dynamiske' bindinger til eventen, bør det ikke foregå ved at flytte selve eventen ind i funktionerne, men ved brug af f.eks. et observer pattern.
Avatar billede softspot Forsker
14. januar 2011 - 14:40 #11
@intenz: det er vist ret godt i tråd med det jeg siger i mit indlæg... :-)

...og jeg var helt klar på, at dit indlæg var rettet mod spørger ;-)
Avatar billede intenz Novice
14. januar 2011 - 14:43 #12
Ja :)
Avatar billede hypofysen Nybegynder
18. februar 2011 - 09:07 #13
beklager den sene tilbagemelding, men jeg fik det til at fungere,

intenz og soft smid et svar
Avatar billede softspot Forsker
18. februar 2011 - 13:58 #14
Kommer her! :-)
Avatar billede hypofysen Nybegynder
19. februar 2011 - 07:45 #15
så mangler vi bare intenz :)
Avatar billede hypofysen Nybegynder
28. februar 2011 - 13:33 #16
intenz du må skrive hvis jeg skal oprette et spørgsmål med point til dig
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Netværksteknikere til design, drift og vedligehold ved Cyberdivisionen

Forsvarsministeriets Materiel- og Indkøbsstyrelse

IT-Sikkerhedsrådgiver til Cyberdivisionen i Hvidovre

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Cyberdivisionen søger IT-supporter til Lokal IT Servicecenter i Karup