Toon posts:

[JS] setAttribute("onlick" ...

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een probleempje met de setAttribute functie. Het gaat om het volgende stukje script:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function dealer(b) {
  alert(b);
  
}

function placeButtons(players) {
  var locs = positions[players-1];
  for (a = 0; a < locs.length; a++) {
    buttons[a] = new Object;
    buttons[a].no = a;
    buttons[a].el = document.createElement("div");
    
      document.getElementById("table").appendChild(buttons[a].el);
      buttons[a].el.setAttribute("class", "playerButton");
      buttons[a].el.style.left = locs[a][0]+"px";
      buttons[a].el.style.top = (locs[a][1]+basetop)+"px";  

    b = document.createElement("input");
    buttons[a].btn = buttons[a].el.appendChild(b);
    b.setAttribute("type", "button");
    b.setAttribute("value", a+1);
    b.setAttribute("onclick", "dealer(a)");
    b.style.height = "50px";
    b.style.width = "50px";
    b.style.fontSize = ".7em";
  }
}


Probleem is dat de functie "dealer(b)" het nummer van de knop, waarop geklikt wordt, nodig heeft, maar welke knop ik ook indruk, de alert geeft altijd "9" weer. Dit natuurlijk omdat "a" aan het eind van de for() op 9 staat, maar wat kan ik hier aan doen?

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 09:58

crisp

Devver

Pixelated

Wrappen in een closure, of in je handler afleiden adhv de value van de button

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Juup
  • Registratie: Februari 2000
  • Niet online
Het gemakkelijkste is dit:
JavaScript:
1
b.setAttribute("onclick", "dealer(" + a + ")");

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
crisp schreef op zaterdag 08 november 2008 @ 13:46:
Wrappen in een closure, of in je handler afleiden adhv de value van de button
Dat eerste moet je me even uitleggen, en dat tweede kan niet, omdat die values variabel zijn (zodra je erop klikt moet de value juist veranderen)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Lamaar, ik heb 'm al:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
function dealer(b) {
  alert(b);
  
}

function placeButtons(players) {
  var locs = positions[players-1];
  for (a = 0; a < locs.length; a++) {
    buttons[a] = new Object;
    buttons[a].no = a;
    buttons[a].el = document.createElement("div");
    
      document.getElementById("table").appendChild(buttons[a].el);
      buttons[a].el.setAttribute("class", "playerButton");
      buttons[a].el.style.left = locs[a][0]+"px";
      buttons[a].el.style.top = (locs[a][1]+basetop)+"px";  

    b = document.createElement("input");
    b.logic = a.toString();
    buttons[a].btn = buttons[a].el.appendChild(b);
    b.setAttribute("type", "button");
    b.setAttribute("value", a+1);
    b.setAttribute("onclick", "dealer(this.logic)");
    b.style.height = "50px";
    b.style.width = "50px";
    b.style.fontSize = ".7em";
  }
}

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op zaterdag 08 november 2008 @ 13:47:
[...]


Dat eerste moet je me even uitleggen, en dat tweede kan niet, omdat die values variabel zijn (zodra je erop klikt moet de value juist veranderen)
Handig leesvoer:
http://www.google.nl/sear...official&client=firefox-a

Closures kunnen heel krachtig zijn in Javascript, ik zou er in ieder geval even naar kijken als ik jou was.
Pagina: 1