Avatar billede spectrenectar Nybegynder
30. maj 2010 - 18:35 Der er 8 kommentarer og
1 løsning

jQuery: benytte live efter load for at sætte data om input

Hej eksperter,

Jeg er lige startet på jQuery v1.4.x i dag og står nu overfor den opgave at jeg har 3 hændelser jeg gerne vil lytte efter ved alle input[type=text] felter med klassen "nor".
De 2 af dem er intet problem, nemlig focus og blur. Den tredje skal ske med det samme siden bliver indlæst, og efter hver succesfulde load forespørgsel som printer flere input[type=text] felter.

Her er koden som jeg gætter på den skal skrives:

    $(document).ready(function() {
       
        //Set data about default value, and to clear or not, on input
        $("input.nor").live("???", function() {
            $(this).data("default", "Indtast dit brugernavn her...");
            $(this).data("do_clear", true);
        });
       
        //Read data, and clear it if it is default value
        $("input.nor").live("focus", function() {
            if($(this).data("do_clear")) {
                $(this).value = "";
                $(this).removeClass("opaque");
                $(this).data("do_clear", false);
            }
        });
       
        //Read data, and occupy it if it is of no value
        $("input.nor").live("blur", function() {
            if($(this).value=="") {
                $(this).value = $(this).data("default");
                $(this).addClass("opaque");
                $(this).data("do_clear", true);
            }
        });
    });

Med andre ord: Hvor skal jeg sætte data om et input felt der bliver skabt ude i fremtiden?

Tak for det!
Niels
Avatar billede softspot Forsker
30. maj 2010 - 19:31 #1
Hvis det er AJAX du taler om, så er det noget du kan sætte op i det kaldet til serveren er afsluttet (f.eks. i .load-metoden der har en callback-parameter til en success-funktion, hvor du kan udføre de handlinger du måtte have brug for når kaldet er gennemført).

Se mere om load-funktionen her: http://api.jquery.com/load/
Avatar billede spectrenectar Nybegynder
30. maj 2010 - 22:36 #2
Tak for din kommentar,

selvom mit spørgsmål ikke helt gik på det, er det rigtigt nok load funktionen jeg refererer til, og du mener så at jeg kan bruge den til at sætte mine tekstinput's data.

Ok, det skal jeg overveje, dog nok nærmere globalt via ajaxSuccess: http://api.jquery.com/ajaxSuccess/

Men hvad jeg i virkeligheden godt kunne tænke mig var om muligt at bruge live metoden eller tilsvarende så jeg ikke blander ting der ikke har noget med hinanden at gøre sammen.

Hvis det ikke er muligt at sætte data på noget der bliver indlæst på et senere tidspunkt, uden at gøre noget til den tid, så smid et svar så er den godtaget, ellers vil jeg meget gerne vide det.

Tak igen :)
Avatar billede softspot Forsker
30. maj 2010 - 23:05 #3
Jeg er usikker på hvorfor load-metodens success-callback ikke kan bruges. Jeg synes jo netop tingene bliver isoleret på denne måde. Kan du argumentere for, hvorfor du synes dette ikke vil fungere i din situation?

For mig at se, ville brug af ajaxSucces gribe for meget ind i hvad der ellers kunne risikere at ske i forbindelse med andre ajax-kald. Du vil givetvis komme til at opleve sideeffekter og at du skulle til at håndtere disse, hvis du implementerer det i ajaxSuccess.

"Hvis det ikke er muligt at sætte data på noget der bliver indlæst på et senere tidspunkt, uden at gøre noget til den tid...". Jeg forstår ikke helt hvad du mener. For mig at se er det svært at sætte data på noget som ikke eksisterer endnu. Jeg synes jo netop at load-funktionen er et rigtig fint tidspunkt at gøre det på...
Avatar billede spectrenectar Nybegynder
31. maj 2010 - 09:06 #4
Jeg kan ikke argumentere for det på anden måde end at det vil medføre at jeg skal til at sende noget vedhæftet kode med til hvert eneste ajax kald som muligvis returnerer en form. Noget kode som gør det samme hver gang.

"For mig at se er det svært at sætte data på noget som ikke eksisterer endnu"
Men det kan du netop med funktionen live. Det er en ny funktion som er kommet med jQuery 1.3.x: http://api.jquery.com/live/

Også derfor tænker jeg det må være muligt at definere eet sted at mine inputs med den bestemte klasse altså skal have noget data vedhæftet. Jeg mangler bare at finde ud af hvordan.
Avatar billede softspot Forsker
31. maj 2010 - 09:38 #5
Jeg er klar over at live kan bruges til at koble et event på elementer der matcher et mønster nu og i fremtiden, men jeg kender bare ikke dit setup godt nok til at kunne vurdere hvad der ville være smartest at gøre (for du har ikke umiddelbart et event du kan koble på nye elementer med live-funktionen).

Det lyder som om du tænker, at du skal definere en anonym funktion hver gang du kalder load, men du kan jo også referere til en navngiven funktion i callback-parameteren, hvilket i det mindste giver dig mulighed for kun at definere funktionen én gang.

Eksempel:

function fn() {
  $("input.nor")
    .data("default", "Indtast dit brugernavn her...")
    .data("do_clear", true);
}

$(function() {
  $("#knap-der-loader").click(function() {
    $("#lag-der-skal-loades").load(url, fn);
  });

  //
  // dine øvrige initialiseringshandlinger...
  //
});
Avatar billede spectrenectar Nybegynder
01. juni 2010 - 16:42 #6
"for du har ikke umiddelbart et event du kan koble på nye elementer med live-funktionen"

Nå okay, jamen så lytter jeg til din erfaring og gør som du foreslår :)
Den er godtaget.
Avatar billede softspot Forsker
01. juni 2010 - 18:23 #7
Om ikke andet indtil du finder en bedre løsning, som løfter dit behov på en mere effektiv måde (det er vist det man med et engelsk ord kalder "refactoring" :-)).
Avatar billede spectrenectar Nybegynder
01. juni 2010 - 19:17 #8
Du må hellere lige blive godkendt som svarherre og få din formue på 15 point, så smid meget gerne et svar ellers svarer jeg hermed selv. :)
Avatar billede softspot Forsker
01. juni 2010 - 20:40 #9
Kommer her :-)
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