Avatar billede karl-koder Nybegynder
17. april 2008 - 10:58 Der er 2 kommentarer og
1 løsning

Opfølgning på tidligere tråd

Jeg fik tidligere hjælp til at noget JSON her på http://www.eksperten.dk/spm/826213, men jeg har ikke kunne finde ud af hvorfor jeg ikke får det korekte id med i mine event handlers.

Lidt kode :

var isInserted = false;
var ary;
function listRoles(jsonObject)
{
    if(isInserted){return;}
    else{isInserted = true;}
   
    var rowParent = document.getElementById("medlemstabel").getElementsByTagName("tbody")[0];//finder tbody-elementet
    var klonNode = rowParent.getElementsByTagName("tr")[1];
    var newRow;
    var newTd;
    var newButton;
    var ua = navigator.userAgent.toLowerCase();
    var displayType = ua.indexOf("msie")>-1 && ua.indexOf("opera") == -1 ? "block" : "table-row";
    ary = jsonObject.users;
    for(i=0,im=ary.length;im>i;i++)
    {
        newRow = klonNode.cloneNode(true);
        newRow.style.display = displayType;
        newTd = newRow.getElementsByTagName("td");
        for(j=0;4>j;j++)
        {
            newTd[j].firstChild.nodeValue = ary[i][j];
        }
        rowParent.appendChild(newRow);
        newButton = newRow.getElementsByTagName("input");
        var idx = i;
        insertEvent(newButton[0], "click", function(){ajaxEdit(ary[idx][0])});
        insertEvent(newButton[1], "click", function(){ajaxDelete(ary[idx][0])});
    }
}

function insertEvent(elm, evnt, func)
{
    if(elm.addEventListener && !elm.attachEvent)//DOM-compliant
    {
        elm.addEventListener(evnt, func, true);
    }
    else if(elm.attachEvent)//M$-compliant
    {
        elm.attachEvent("on"+evnt, func);
    }
    else//andet
    {
        elm["on"+evnt] = func;
    }
}

function ajaxDelete(intId)
{
    alert("Dette vil med tiden slette en record med id "+intId+" !");
}

function ajaxEdit(intId)
{
    alert("Dette vil med tiden hente en record til redigering med id "+intId+" !");
}

problemet er at der hvor jeg sætter event handler på mine image buttons og tilføjer et id fra min JSON streng der sættes den id'et fra sidste record istedet for fra den record der er tale om.

Så hvis jeg har 3 records i min database med ideer 1, 2 og 3 så er det, det sidste id, 3 i dette tilfælde der udskrives i min alert.

Hvad gør jeg forkert og hvad skal der til for at få det til at virke ?
Avatar billede w13 Novice
17. april 2008 - 11:34 #1
Det er, fordi du gemmer event sådan her:

ajaxEdit(ary[idx][0])

Så når den bliver kørt, vil den tage det, som idx er sat til på det tidspunkt. Det vil derfor være den sidste record, den nåede til.

Sæt dem i stedet med:

insertEvent(newButton[0], "click", new Function("ajaxEdit(ary["+idx+"][0]"));
insertEvent(newButton[1], "click", new Function("ajaxDelete(ary["+idx+"][0]"));
Avatar billede karl-koder Nybegynder
17. april 2008 - 11:42 #2
Og med den manglende ) i linierne ovenfor kom det langt om længe til at virke ;o)

Tak for hjælpen, point på vej til dig ;o)
Avatar billede w13 Novice
17. april 2008 - 11:52 #3
:P nå ja.
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