[javascript] object is leeg

Pagina: 1
Acties:

  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

Topicstarter
het gaat om volgende code:
code:
1
onclick='toggle(this, $detailid);'

bij het uitvoeren van deze code, is niets mis.. en neemt hij ook het detailid aan.
maar eens in de functie:
code:
1
2
3
4
5
6
7
8
9
10
11
function toggle(link, divId) {
alert("link: " + link + "divId: " + divId);
var lText = link.innerHTML;
var d = getObject(divId);
if (lText == '+') {
    link.innerHTML = '-'; d.style.display = 'block';
    }
    else { 
        link.innerHTML = '+'; d.style.display = 'none'; 
        } 
}

is de alert op de 2de regel de volgende:
link:javascript%20void(0);divId: [object]
Wat zou er dan foutgaan omdat hij de divId ineens niet meer zou kennen?

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:24

crisp

Devver

Pixelated

Misschien moet je er in je onclick quotes omheen zetten?

Intentionally left blank


  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

Topicstarter
nee, want dan gaat het helemaal mis..

In de broncode van de html file, staat na het parsen van de php de juiste code, neem ik aan:
code:
1
onclick='toggle(this, exp69607);'

maar die exp69607 wordt blijkbaar niet doorgegeven aan de functie toggle... :(

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:24

crisp

Devver

Pixelated

-FoX- schreef op 01 mei 2003 @ 13:49:
nee, want dan gaat het helemaal mis..

In de broncode van de html file, staat na het parsen van de php de juiste code, neem ik aan:
code:
1
onclick='toggle(this, exp69607);'

maar die exp69607 wordt blijkbaar niet doorgegeven aan de functie toggle... :(
exp69607 moet toch echt een string zijn naar mijn mening. Ik vermoed dat functie getObject aan de hand van dit id een object referentie teruggeeft (dmv getElementById oid).

Intentionally left blank


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 19-08 22:14

Bosmonster

*zucht*

die exp... moet wel tussen quotes natuurlijk..

onclick="toggle(this, '$detailid');"

crisp was me voor :P

[ Voor 13% gewijzigd door Bosmonster op 01-05-2003 13:54 ]


Verwijderd

Misschien is het handig om alle relevante info van te voren op te geven.
Die $detailid had net zo goed een javascript variabele kunnen zijn (ik refereer even naar het recente 'naamgeving' topic).

Vervolgens kan niemand dus weten wat divId precies moest bevatten, ook al bleek dat wel een beetje uit de naam. Verder: duidelijk coden, juist indenten, en maximaal 1 javascript statement per regel.

  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

Topicstarter
$detailid is een php-variable die ervoor zorgt dat elk div een unieke id heeft

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:24

crisp

Devver

Pixelated

-FoX- schreef op 01 mei 2003 @ 14:11:
$detailid is een php-variable die ervoor zorgt dat elk div een unieke id heeft
Dat was inderdaad ook mijn guess. Je vertelt echter nog steeds niet wat er dan precies mis gaat als je er wel quotes omzet.
Wellicht handig om wat meer code te laten zien, zo ben ik wel geinteresseerd in hoe je div tag er dan uitziet, en ook de getObject() functie...

Intentionally left blank


  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

Topicstarter
crisp schreef op 01 May 2003 @ 14:14:
Dat was inderdaad ook mijn guess. Je vertelt echter nog steeds niet wat er dan precies mis gaat als je er wel quotes omzet.
Wellicht handig om wat meer code te laten zien, zo ben ik wel geinteresseerd in hoe je div tag er dan uitziet, en ook de getObject() functie...
eerst worden in deze 2 variabelen unieke id's gezet.. dit alles staat in een while-loop, totdat alle artikelen zijn doorlopen:
PHP:
1
2
$detailid = "exp".$rcList->id;
$detaillinkid = "exp".$rcList->id."_link";

dan is er volgende code, die ervoor zorgt dat voor het originele productid iets komt te staan waardoor je kan expanden om detail informatie te zien:
PHP:
1
2
3
4
5
6
print "<div style='border: 1px solid #000000; padding: 0px; background: #EEEEEE;'>";
print "<tr>";
print "<td width='0' bgcolor='$bar_color'><small>
[<a title='toon/verberg details' id='$detaillinkid' href='javascript: void(0);' 
onclick='toggle(this, $detailid);'  style='text-decoration: none; color: #FF0000;'></a>]
 ".$rcList->groart.$rcList->sorart.$rcList->code."</small></td>";


dit is de rij met detailinformatie:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
print "<td colspan='3'>
         <div id='$detailid' style='padding: 3px;'>";
         print "<table width='100%'>";
         print "de info...";
         print "</table>";
         print "</div>";
         print "</td>";
         print "</div>";
         print "</tr>";
         print "<script language='JavaScript'>";
                 print "toggle(getObject('$detaillinkid'), '$detailid');";
         print "</script>";


en dan zit er nog in de detail.js, die wordt aangeroepen in de head:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function getObject(id) { 
if (ie4) { 
    return document.all[id];
    }
    else { 
        return document.getElementById(id); 
        } 
    }
    
function toggle(link, divId) {
alert("link: " + link + "divId: " + divId);
var lText = link.innerHTML;
var d = getObject(divId);
if (lText == '+') {
    link.innerHTML = '-'; d.style.display = 'block';
    }
    else { 
        link.innerHTML = '+'; d.style.display = 'none'; 
        } 
}

[ Voor 17% gewijzigd door -FoX- op 01-05-2003 14:23 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:24

crisp

Devver

Pixelated

Dit zou toch moeten werken, let op dat je de quotes wel moet escapen:

PHP:
1
2
3
4
5
6
7
8
<?
print "<div style='border: 1px solid #000000; padding: 0px; background: #EEEEEE;'>"; 
print "<tr>"; 
print "<td width='0' bgcolor='$bar_color'><small> 
[<a title='toon/verberg details' id='$detaillinkid' href='javascript: void(0);' 
onclick='toggle(this, \"$detailid\");'  style='text-decoration: none; color: #FF0000;'></a>] 
".$rcList->groart.$rcList->sorart.$rcList->code."</small></td>";
?> 

[ Voor 25% gewijzigd door crisp op 01-05-2003 14:29 ]

Intentionally left blank


  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

Topicstarter
|:( |:( |:(
Bedankt!!!
Ik had er niet echt bij stilgestaan, dat het wel degelijk een verschil zou uitmaken als je "\ gebruikte ipv '

In ieder geval bedankt!! :)
Het vosje is weer gelukkig ;)

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:24

crisp

Devver

Pixelated

-FoX- schreef op 01 May 2003 @ 14:31:
|:( |:( |:(
Bedankt!!!
Ik had er niet echt bij stilgestaan, dat het wel degelijk een verschil zou uitmaken als je "\ gebruikte ipv '

In ieder geval bedankt!! :)
Het vosje is weer gelukkig ;)
Je kan geen ' binnen ' gebruiken, ook niet in HTML ;)

Intentionally left blank


Verwijderd

crisp schreef op 01 May 2003 @ 14:33:
[...]

Je kan geen ' binnen ' gebruiken, ook niet in HTML ;)
Aanvulling: escapen met een backslash kan dus ook niet binnen HTML attributen.

Binnen quotes moet je quotes van hetzelfde type vervangen door hun entities. De functie htmlspecialchars is je vriend, zeker met de ENT_QUOTES flag.

[ Voor 3% gewijzigd door Verwijderd op 01-05-2003 14:38 ]

Pagina: 1