Avatar billede zkov82 Nybegynder
06. oktober 2009 - 12:09 Der er 11 kommentarer

Håndtering af form i FBJS

Hi.

Jeg er igang med at lave en Facebook ap, hvor jeg har en form, der bliver genereret fra en db. Formen vises via php og er så tilgængelig fra fbjs via tagget fb:js-string.

Her er en kort snippet:

echo "<div id='cf'>";
echo "<fb:js-string var='catForm'>";
echo "<h2>Choose your favorite categories:</h2>";
        $contact = new contact(null,null,null);
        $user = $contact->getAllCategoriesForAUserFromServer($uid);
        $iconUrls = $contact->getAllCategoryIcons();
        $iconTuple = null;
        unset($contact);
             
    echo "<form id='cCat' name='cCat' method='POST'>";
    echo "<table>";

        $count = count($iconUrls);             
        for($i = 0; $i < $count; $i=$i+3) {
            $iconTuple = split("\?#\?", $iconUrls[$i]);
 
            echo "<tr>";

            echo "    <td><img src='" . $iconTuple[1] . "' /></td>";
            if( in_array($iconTuple[0], $user) ) {
             
                echo "    <td><input type='checkbox' name=" . $iconTuple[0] ." id=".$iconTuple[0]. " value='true' onClick='handleForm(this.form)' checked />" . $iconTuple[0] . "</td>";
             
            }else{
                echo "    <td><input type='checkbox' name=" . $iconTuple[0] ." id=".$iconTuple[0]. " value='true' onClick='handleForm(this.form)' />" . $iconTuple[0] . "</td>";
            }

.....
                echo "</form>";
            echo "<br/>";
        echo "</fb:js-string>";



Mit problem er at, jeg har en box som jeg kalder "facebook friends", og så snart den checkbox er checked, skal alle de andre gray out, så man ikke kan vælge dem.

Som det kan ses foroven, forsøger jeg at gøre det via handleForm(...) functionen
jeg har forsøgt at gøre dette:

function handleForm(form) {
    var f = document.getElementById("cCat");
    var params = [];
    params = f.serialize();
    if(params.Art) {
        document.getElementById("google").setTextValue("checked" + params.length);
    }else{
        document.getElementById("google").setTextValue("not checked"+ params.length);
    }
}

Men, af en eller anden grund, vises params.length bare som "undefined". Jeg vil virkelig gerne have en måde, hvorpå jeg kan løbe listen af inputs (checkboxes) igennem dynamisk, da jeg regner med at der skal tilføjes/fjernes elementer løbende.

Jeg har en anden function der tager sig af at submitte formen via et Ajax kald, som bruger serialize() og det virker fint.

help?
Avatar billede olebole Juniormester
07. oktober 2009 - 20:34 #1
<ole>

Jamen, så er det jo linjen:

params = f.serialize();

- som ikke virker. Det er ikke til at gætte, hvad du gør galt, med den kode, du viser

/mvh
</bole>
Avatar billede zkov82 Nybegynder
07. oktober 2009 - 20:46 #2
Ok...Jeg synes jeg har lidt svært ved at finde noget information om hvordan den funktion virker...Så for mig er den lidt en magic method, og derfor kan jeg ikke lige se om jeg gør det rigtigt.
Det sjove er, at jeg bruger f.serialize() til en anden formhandling på den samme form, og der virker det fint.
Avatar billede olebole Juniormester
07. oktober 2009 - 21:00 #3
Jeg kan kun gentage: "Det er ikke til at gætte, hvad du gør galt, med den kode, du viser"
Avatar billede olebole Juniormester
07. oktober 2009 - 21:02 #4
- og der er intet magisk ved nogen somhelst JavaScript funktion  =)
Avatar billede zkov82 Nybegynder
07. oktober 2009 - 21:42 #5
hehe...ok, hvad ska du bruge for at hjælpe mig??
Avatar billede olebole Juniormester
07. oktober 2009 - 21:59 #6
Et link til siden ville være en stor hjælp.

Hvad sker der, hvis du skriver:


    var f = document.getElementById("cCat");
    var params = [];
    params = f.serialize();
    alert(params);

Avatar billede zkov82 Nybegynder
07. oktober 2009 - 22:13 #7
Det er lidt svært, når det er en facebook application, som er afhængig af mange ting....
men når jeg skriver params ud får jeg følgende:

[object Object]
Avatar billede olebole Juniormester
07. oktober 2009 - 23:34 #8
Du kan undersøge objektet med:


    var f = document.getElementById("cCat");
    var params = [];
    params = f.serialize();
    var a = [];
    for (var x in params) a.push(x+" => "+params[x]);
    alert(a.join("\n"));


- men hvis du ikke selv er ret stærk i JS og/eller ikke kender API'et rigtig godt, er det svært at hjælpe
Avatar billede zkov82 Nybegynder
07. oktober 2009 - 23:46 #9
Der står følgende:

friend_ => 531388916 lon => 10.2120017 lat => 56.1581354 Music => true Litterature => true Friends_like => true Facebook_interests => true

hvilket er rigtigt nok..


ps...

jeg bruger FBs new Dialog() til at vise indholdet, da FB ikke lige tillader alert ;)
Avatar billede olebole Juniormester
07. oktober 2009 - 23:56 #10
Hvis det er rigtig nok, forstår jeg ikke din kommentar:
    Men, af en eller anden grund, vises params.length bare som "undefined".

Objektet indeholder jo tydeligvis ikke en length property  ;o)
Avatar billede zkov82 Nybegynder
26. april 2010 - 18:10 #11
Hej Ole.

undskyld det sene svar, jeg har været lidt væk fra det hele..

Kan du ikke smide et svar så du kan få de points du fortjener?
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