sorry voor de vage titel en ik hoop dat het in de goeie categorie staat maar goed hier het probleem
ik weet ook dat ik niet om gehele scripts mag vragen maar ik wil er ook van leren..
probleem: ik haal uit een table een naam, titel en datum en alle data daarin word keurig onderelkaar weergegven, maar nu wil ik dat als je op een titel klikt dat het bericht direct onder de titel word weergeven (tussen 2 titels in dus)
1) De data wordt bij het maken van HTML verborgen
1.1) in een array
D.m.v. een functie op de titel 'showInhoud(id)'. Die leest dan de inhoud uit de array en zet het d.m.v. innerHTML in de corresponderende container (div, span, table ...).
1.2) in een al klaar staande div/span/table
de data wordt kant en klaar klaargezet in een container. Die container verberg je d.m.v. CSS (display:none). Wanneer dan de functie aangeropen wordt zet je d.m.v. JS document.getElementById(id).style.display 'op block'. Dit is de eenvoudigste manier.
2) httprequest
Dit is tegenwoordig de populairste methode, maar of dit de beste methode is. Hierbij zet je dus alleen de titels in het document, waarbij er bij het klikken op een titel een link naar php wordt gestuurd met een id. De php zoekt de corresponderende tekst op en geeft dat door. Daarna kan JS het werk afhandelen en de data op de juiste plaats zetten (d.m.v. van een al bestaande container of een die dynamisch wordt gemaakt)
ik probeer het nu als volgt te doen, op de subject zit de volgende url:
<a href='#' onclick="javascript: document.getElementById(id).style.display"><?= stripslashes($arr['subject']) ?></a>
en de class die zit de tabel met de message heet hide_msg en bevat display: none; zoals je zei
maar de code die jij gaf werkt met id, hoe kan ik het met een class doen dan
verder staat er in die url niet dat display: none, display: block moet worden en als dit zou werken dan word elke bericht geshowd omdat er op het moment geen id word meegegeven
<script>
function getElementByClassName(name)
{
// ik ga ervan uit dat het divs zijn
var objs = document.getElementsByTagName("div");
var y = objs.length;
for(var x=0;x<y;x++)
{
if(objs[x].className == name)
return objs[x];
}
}<script>
<script>
function getElementByClassName(name)
{
// ik ga ervan uit dat het divs zijn
var objs = document.getElementsByTagName("div");
var y = objs.length;
for(var x=0;x<y;x++)
{
if(objs[x].className == name)
return objs[x];
}
}<script>
zoals je ziet bestaat er geen standaard functie om alle objecten te krijgen die een bepaalde classnaam hebben. Nu kan je dit oplossen door door alle elementen te gaan (=tijdrovend, daarom dat ik een selectie maak d.m.v. alleen de divs te selecteren).
Ik zeg het dus nog een keer, een id en document.getElementById is hiervoor veel sneller.
Nu staat er in jouw code ook een fout. Het moet hetvolgende zijn:
inderdaad, op het eerste zicht zie ik dat die document.msg() naar msg() mag veranderd worden. Dus die document moet daar niet voor.
Ook gebruik je id's (getallen dus), dit gaat ook niet. Je moet altijd een eerst een letter hebben. Dus je kan dit gemakkeljk veranderen in 'toon<?= $arr['id'] ?>'
Vergeet dan ook de quotes niet, of het zal niet werken
ik snap het niet helemaal meer , maar op een of andere manier moet de name in de functie toch ook een value mee krijgen, dat moet de value krijgen van het id in die laatste tabel als ik het goed begrijp maar kom er niet helemaal uit...
hiet moet zo zijn, maar het kan kloppen dat name eigenlijk niet op een table mag.
Maar je hebt dus vershillende div's dat je wilt tonen. Staan die dan ook na elkaar, want dan is het mogelijk om alles in 1 grote container te zetten. Dit kan je dan wel een ID werken. (en dat is dan wel valid)