login  Naam:   Wachtwoord: 
Registreer je!
 Forum

direct resultaat

Offline Ultimatum - 28/07/2006 21:44
Avatar van UltimatumPHP expert 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)

kan iemand mij helpen 

14 antwoorden

Gesponsorde links
Offline haytjes - 28/07/2006 22:34
Avatar van haytjes Gouden medailleGouden medaille

JS gevorderde
je hebt hier 2 manieren voor

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)

Nu is het aan jou om de keuze te bepalen;-)
Offline Ultimatum - 29/07/2006 08:29
Avatar van Ultimatum PHP expert bedankt voor je uitgebreide antwoord 

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
Offline haytjes - 29/07/2006 12:16
Avatar van haytjes Gouden medailleGouden medaille

JS gevorderde
het best is met een ID te werken. Je kan met een class werken, maar dit is zeer omslachtig:

  1. <script>
  2. function getElementByClassName(name)
  3. {
  4. // ik ga ervan uit dat het divs zijn
  5. var objs = document.getElementsByTagName("div");
  6. var y = objs.length;
  7. for(var x=0;x<y;x++)
  8. {
  9. if(objs[x].className == name)
  10. return objs[x];
  11. }
  12. }<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:
  1. <a href='#' onclick="document.getElementById('toon1').style.display='block'">
  2. <?= stripslashes($arr['subject']) ?>
  3. </a>
  4. <div style='display:none' id='toon1'>
  5. testestesteststsets
  6. </div>

en als je het dan ook wilt dat het na het opnieuw erop drukken het ook weer sluit:
  1. <a href='#' onclick="var obj = document.getElementById('toon1'); obj.style.display = (obj.style.display == 'none)?'block':'none'">
  2. <?= stripslashes($arr['subject']) ?>
  3. </a>
  4. <div style='display:none' id='toon1'>
  5. testestesteststsets
  6. </div>
Offline Ultimatum - 29/07/2006 17:44
Avatar van Ultimatum PHP expert alweer bedankt voor de geweldige uitleg maar... als ik meerdere berichten heb is het id niet meer uniek en is het ook niet meer volgens de richtlijnen 

verder heb ik dit en word er niks om mijn scherm getoond:
  1. <table cellpadding='0' cellspacing='0'>
  2. <tr>
  3. <td style='width: 400px'>
  4. <a href='#' onclick="var obj = document.getElementById('toon1'); obj.style.display = (obj.style.display == 'none)?'block':'none'">
  5. <?= stripslashes($arr['subject']) ?>
  6. </a>
  7. </td>
  8. <td style='width: 150px'><?= stripslashes($arr['name']) ?></td>
  9. <td style='width: 126px'><?= date("d/m/y H:s", $arr['date']) ?></td>
  10. </tr>
  11. </table>
  12.  
  13. <table cellpadding='0' cellspacing='0' style='display: none' id='toon1'>
  14. <tr>
  15. <td><?= stripslashes($arr['message']) ?></td>
  16. </tr>
  17. </table>


(ps: sorry voor de tabellen )

als ik de laaste code in een apart bestand draai die jij daar gaf dan doet die het ook niet trouwens
Offline haytjes - 29/07/2006 18:44 (laatste wijziging 29/07/2006 18:44)
Avatar van haytjes Gouden medailleGouden medaille

JS gevorderde
inderdaad, ik had een klein foutje gescript in mijn voorbeeld. Ik had een ' vergeten, sorry langs mijn kant:
  1. var obj = document.getElementById('toon1'); obj.style.display = (obj.style.display == 'none)?'block':'none'
=>
  1. var obj = document.getElementById('toon1'); obj.style.display = (obj.style.display == 'none')?'block':'none'
Offline Ultimatum - 29/07/2006 19:23
Avatar van Ultimatum PHP expert ok, het werkt nu deels 

hij laat nu maar 1 bericht zien, maakt niet uit op welke link ik klik (er zijn er 2 )

verder is toon1 niet uniek meer, kan ik daar iets tegen doen... een class bijvoorbeeld

Offline haytjes - 29/07/2006 19:47
Avatar van haytjes Gouden medailleGouden medaille

JS gevorderde
je kan wel gebruik maken van een name
  1. <div name='test'>
  2. </div>
  3. <div name='test'>
  4. </div>

en dan als JS:
  1. var objs = document.getElementsByName('test');
  2. var y = objs.length;
  3. for(var x=0;x<y;x++)
  4. {
  5. objs[x].style.display = (objs[x].style.display == 'none')?'block':'none'
  6. }


Nu kan je dat weer tussen die haakjes proppen (moeten alle newlines weg) oftewel kan je hier een functie van maken. Je kan kiezen.
Offline Ultimatum - 29/07/2006 20:32
Avatar van Ultimatum PHP expert ik snap het echt niet meer , heb nu dit
  1. include './inc/functions.js';
  2. ?>
  3. <table cellpadding='0' cellspacing='0' style='margin-top: 10px'>
  4. <tr>
  5. <td style='width: 400px; border-bottom: 1px #818181 solid'>Subject</td>
  6. <td style='width: 150px; border-bottom: 1px #818181 solid'>Name</td>
  7. <td style='width: 126px; border-bottom: 1px #818181 solid'>Date</td>
  8. </tr>
  9. </table>
  10. <?php
  11. $select = mysql_query("SELECT * FROM contact ORDER BY id DESC");
  12. while($arr = mysql_fetch_array($select))
  13. {
  14. ?>
  15. <table cellpadding='0' cellspacing='0'>
  16. <tr>
  17. <td style='width: 400px'>
  18. <a href='#' onclick="document.msg(<?= $arr['id'] ?>)">
  19. <?= stripslashes($arr['subject']) ?>
  20. </a>
  21. </td>
  22. <td style='width: 150px'><?= stripslashes($arr['name']) ?></td>
  23. <td style='width: 126px'><?= date("d/m/y H:s", $arr['date']) ?></td>
  24. </tr>
  25. </table>


in functions.js staat:
  1. <script type='text/javascript'>
  2. function msg(name)
  3. {
  4. var objs = document.getElementsByName(name);
  5. var y = objs.length;
  6. for(var x=0;x<y;x++)
  7. {
  8. objs[x].style.display = (objs[x].style.display == 'none')?'block':'none'
  9. }
  10. }
  11. </script>


maar volgens mij gebruik ik het niet goed, heb je een idee hoe ik het kan oplosse 
Offline haytjes - 29/07/2006 20:56
Avatar van haytjes Gouden medailleGouden medaille

JS gevorderde
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
Offline Ultimatum - 29/07/2006 21:11
Avatar van Ultimatum PHP expert hmm heb het nu zo dan, maar je ziet het bericht gelijk

  1. <table cellpadding='0' cellspacing='0'>
  2. <tr>
  3. <td style='width: 400px'>
  4. <a href='#' onclick="msg('toon<?= $arr['id'] ?>')">
  5. <?= stripslashes($arr['subject']) ?>
  6. </a>
  7. </td>
  8. <td style='width: 150px'><?= stripslashes($arr['name']) ?></td>
  9. <td style='width: 126px'><?= date("d/m/y H:s", $arr['date']) ?></td>
  10. </tr>
  11. </table>
  12.  
  13. <table cellpadding='0' cellspacing='0' id='toon<?= $arr['id'] ?>'>
  14. <tr>
  15. <td><?= stripslashes($arr['message']) ?></td>
  16. </tr>
  17. </table>


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... 
Offline haytjes - 29/07/2006 23:16
Avatar van haytjes Gouden medailleGouden medaille

JS gevorderde
i.p.v. id='blabla' moet je nu name='blabla' zetten. Hierdoor kan je meerdere blokken op hetzelfde ogenblik tonen.
Offline Ultimatum - 29/07/2006 23:22
Avatar van Ultimatum PHP expert name='' is geen geldig atribute zo deed ik $name, maar het werkt nog steeds niet...

  1. <table cellpadding='0' cellspacing='0'>
  2. <tr>
  3. <td style='width: 400px'>
  4. <a href='#' onclick="msg(<?= $name ?>)">
  5. <?= stripslashes($arr['subject']) ?>
  6. </a>
  7. </td>
  8. <td style='width: 150px'><?= stripslashes($arr['name']) ?></td>
  9. <td style='width: 126px'><?= date("d/m/y H:s", $arr['date']) ?></td>
  10. </tr>
  11. </table>
  12.  
  13. <table cellpadding='0' cellspacing='0' <?php $name='toon'.$arr['id'].'' ?>>
  14. <tr>
  15. <td><?= stripslashes($arr['message']) ?></td>
  16. </tr>
  17. </table>
Offline haytjes - 29/07/2006 23:29
Avatar van haytjes Gouden medailleGouden medaille

JS gevorderde
<table cellpadding='0' cellspacing='0' name='<?php'toon'.$arr['id'].'' ?>'>

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)
Offline Simon - 30/07/2006 10:25
Avatar van Simon PHP expert name='<?php'toon'.$arr['id'].'' ?>'
-->
name='toon<?=$arr['id']?>'

zo lijkt me toch wel beter, want de jouwe echo'ode zelfs niets 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.278s