Ausklapptext

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Ausklapptext

    Hi Forum,

    nach langer Zeit der Schule und wohlverdientem Urlaub melde ich mich nun zurück. Mit einer etwas nervigen 0-8-15-Frage. Trau mich ja schon gar nicht zu fragen. Wieder eine dieser nooby "Wie geht das Ajax inhalte nachladen bla..." :- /

    Egal ich trau mich einfach mal.

    Folgender fall:

    Spaßeshalber versuche ich mich grade an einem Kostenrechner, der anhand von irgenwelchen XML-Files, die Verbrauchswerte für Strom oder Gas oder Wasser oder Fernwärme oder sonstige Energieformen wie Gülle enthält. Ja anhand dieser Verbrauchswerte werden Diagramme (Balkendiagramme) erstellt, die den Energieverbrauch eines Tages veranschaulichen sollen, also von 0 bis 23 Uhr. der User Wählt einen Tag aus und das Diagramm wird erstellt und angezeigt. Soweit so gut.

    Nun, habe ich gedacht es wäre doch auch schön wenn Oma Else nicht nur sehen würde wieviel sie wann von welcher Energiesparte verbraucht hat, sondern auch gleich noch sehen würde was der Spaß gekostet hat, als Sie Nachts, warum auch immer, den 2500 Watt Fön ne Stunde laufen lies.

    Also bekommt Oma else die Möglichkeit persönliche Einstellungen zu Treffen. Sie gibt an was ihr Strom und Wasser kostet.

    Nach dem Speichern merkt sie, das unter den normalen Verbrauchdiagrammen der Text "Klicken Sie hier um das Kostendiagramm auszuklappen" angezeigt wird. Sie klickt und ----

    --- nichts passiert.

    So schöner Roman (ich schweife gerne ab :) ).

    Ich möchte eine Art ausklapptext implementieren. Habe im Wiki " Inhalte mit Ajax un PHP nachladen" gefunden. Ich möchte allerdings, dass das Pic bzw das Script das das Bild erstellt, bei einem Klick auf "+" (bildchen) aufklappt, sobald das aufgeklappt ist, das "+" zu einem "-" wird. Klickt man auf Minus klappt das Bild wieder zu.
    Ihr kennt das sicher von irgenwelche News scripts oder anderen Seiten.

    In wiefern muss ich den Code aus dem Wiki verändern, das bei einem Klick nicht nur nachgeldaen wird, sondern bei einem zweitklick das nachgeladene wieder verschwindet ?!

    Hoffe das ist nicht sehr aufwendig und lässt sich schnell realisieren.

    *solle mich echt mal mit js un der ajax materie befassen grml*

    Grüße
    Timo

    ps danke schonmal ;)
    ----[Blockierte Grafik: http://www.smilie-harvester.de/smilies/Alltag/putzen.gif] Nein ich bin nicht die Signatur, ich Putz hier nur ---
  • Du checkst einfach den display status vom Div.

    Sprich:

    Quellcode

    1. element=document.getElementById('');
    2. if(element.style.display=='none'){
    3. //ajax request bzw. aufruf der funktion des ajax requests
    4. }else{
    5. element.style.display='none';
    6. }


    Dann kannst du noch das bild +/- per

    Quellcode

    1. document.getElementById('').src='';

    ändern lassen.


    Zusammengefasst:

    Quellcode

    1. // das div element
    2. element=document.getElementById('');
    3. //das bild sprich der img tag. ihm muss eine eindeutige id zugewiesen werden
    4. picture=document.getElementById('');
    5. if(element.style.display=='none'){
    6. picture.src='minus.jpg';
    7. //ajax request bzw. aufruf der funktion des ajax requests
    8. }else{
    9. picture.src='plus.jpg';
    10. element.style.display='none';
    11. }
    Alles anzeigen


    Hilft dir das weiter?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Snowflake ()

  • Ohhkay...

    Soweit bin ich nun:

    habe vier links mit je einer anderen id (0-3). Je anchdem was für einen link man klickt, wird ein anderes "bild" ( echo ('<img alt="Kostenberechnung" src="BkostS.php">'); in dem entsprechenden Div (0-3) angezeigt.

    soweit so gut :)

    nun widme ich mich dem eigentlichen ausklapptext.

    So kauen wird das mal zusammen durch ?! :rolleyes:

    Ich habe vier links, die die funktion sendRequest aufrufen und ihr jeweils ein anderes "digit" übergeben. Die func wird nachgeladen. Jenachdem was für ein "digit" gesendet wurde, wird ein anderes "bild" nachgeladen und in einem Div zwischen 0-3 angezeigt.


    formular.html

    Quellcode

    1. <script type="text/javascript">
    2. <!--
    3. function sendRequest(digit) {
    4. var req;
    5. try {
    6. req = window.XMLHttpRequest?new XMLHttpRequest():
    7. new ActiveXObject("Microsoft.XMLHTTP");
    8. } catch (e) {
    9. //Kein AJAX Support
    10. }
    11. req.onreadystatechange = function() {
    12. if ((req.readyState == 4) && (req.status == 200)) {
    13. var update = new Array();
    14. var response = req.responseText;
    15. if(response.indexOf('||' != -1)) {
    16. update = response.split('||');
    17. for(i=0; i<update.length; i+=2)
    18. document.getElementById(update[i]).innerHTML = update[i+1];
    19. }
    20. }
    21. };
    22. req.open('POST', 'func.php');
    23. req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    24. req.send('s='+digit);
    25. }
    26. //-->
    27. </script>
    Alles anzeigen

    Die funktion ausm Wiki zum nachladen

    Quellcode

    1. <a href="#" onClick="sendRequest('0')"><img id="pic0" src="plus.JPG" height="11,5px" width="10px"/> Feld 1 Nachladen</a><br />
    2. <a href="#" onClick="sendRequest('1')"><img id="pic1" src="plus.JPG" height="11,5px" width="10px"/>Feld 2 Nachladen</a><br />
    3. <a href="#" onClick="sendRequest('2')"><img id="pic2" src="plus.JPG" height="11,5px" width="10px"/>Feld 3 Nachladen</a><br />
    4. <a href="#" onClick="sendRequest('3')"><img id="pic3" src="plus.JPG" height="11,5px" width="10px"/>Feld 4 Nachladen</a><br />
    5. <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" class="example">
    6. <div id="content0" >
    7. </div>
    8. <div id="content1" >
    9. </div>
    10. <div id="content2" >
    11. </div>
    12. <div id="content3" >
    13. </div>
    14. </form>
    Alles anzeigen

    Die links und die Divs


    Allso und wie muss ich den Code nun ändern? *jokling*
    // das div element
    element=document.getElementById('');
    //das bild sprich der img tag. ihm muss eine eindeutige id zugewiesen werden
    picture=document.getElementById('');

    if(element.style.display=='none'){
    picture.src='minus.jpg';
    //ajax request bzw. aufruf der funktion des ajax requests
    }else{
    picture.src='plus.jpg';
    element.style.display='none';
    }


    Hab ich dich richtig verstanden,

    die links sollen nicht direkt die funtkion sendrequest aufrufen, sondern eine andere funktion, nennen wir sie mal klapptext.
    Diese funktion liest erstmal "element" und "picture" aus.
    Wenn das Div auf display "none" steht, wird die source des bilds von + auf minus geändert und 2. die funktion sendRequest aufgerufen. Falls nicht, wird das bild auf + geändert und der display status zurück auf none.

    Hast du nicht vergessen, wenn die bedingung true ist, also die sendRequest function ausgeführt wird, den displaystatus "none" zurückzusetzen? sonst springt er ja nie in den else teil?!

    sorry aber ich bin nicht so der hammer coder muss alles immer nochmal für dummies durchgehen :D
    ----[Blockierte Grafik: http://www.smilie-harvester.de/smilies/Alltag/putzen.gif] Nein ich bin nicht die Signatur, ich Putz hier nur ---
  • Yess!

    also, kaum zu glauben aber ich als voller js noob habe es doch tatsächlich hinbekommen.. sicher nicht die schönste lösung aber es geht zumindest mal :)

    bin gerne für vorschläge offen wie das ding schöner (kürzer) zu lösen ist.

    erstmal die links, die zum aufklappen gedrückt werden müssen:

    Quellcode

    1. <a href="#" onClick="klapptext('0')"><img id="pic0" src="plus.JPG" height="11,5px" width="10px"/> Feld 1 Nachladen</a><br />
    2. <a href="#" onClick="klapptext('1')"><img id="pic1" src="plus.JPG" height="11,5px" width="10px"/>Feld 2 Nachladen</a><br />
    3. <a href="#" onClick="klapptext('2')"><img id="pic2" src="plus.JPG" height="11,5px" width="10px"/>Feld 3 Nachladen</a><br />
    4. <a href="#" onClick="klapptext('3')"><img id="pic3" src="plus.JPG" height="11,5px" width="10px"/>Feld 4 Nachladen</a><br />


    hier die divs:

    Quellcode

    1. <div id="content0" style="display:none">
    2. </div>
    3. <div id="content1" style="display:none">
    4. </div>
    5. <div id="content2" style="display:none">
    6. </div>
    7. <div id="content3" style="display:none">
    8. </div>
    Alles anzeigen


    und der js code:

    Quellcode

    1. <script type="text/javascript">
    2. <!--
    3. function klapptext(nr)
    4. {
    5. var element;
    6. var picture;
    7. if(nr=='0')
    8. {
    9. element=document.getElementById('content0');
    10. picture=document.getElementById('pic0');
    11. if(element.style.display=='none')
    12. {
    13. picture.src='minus.JPG';
    14. sendRequest('0');
    15. element.style.display='inline';
    16. }
    17. else
    18. {
    19. picture.src='plus.jpg';
    20. element.style.display='none';
    21. }
    22. }
    23. if(nr=='1')
    24. {
    25. element=document.getElementById('content1');
    26. picture=document.getElementById('pic1');
    27. if(element.style.display=='none')
    28. {
    29. picture.src='minus.JPG';
    30. sendRequest('1');
    31. element.style.display='inline';
    32. }
    33. else
    34. {
    35. picture.src='plus.jpg';
    36. element.style.display='none';
    37. }
    38. }
    39. if(nr=='2')
    40. {
    41. element=document.getElementById('content2');
    42. picture=document.getElementById('pic2');
    43. if(element.style.display=='none')
    44. {
    45. picture.src='minus.JPG';
    46. sendRequest('2');
    47. element.style.display='inline';
    48. }
    49. else
    50. {
    51. picture.src='plus.jpg';
    52. element.style.display='none';
    53. }
    54. }
    55. if(nr=='3')
    56. {
    57. element=document.getElementById('content3');
    58. picture=document.getElementById('pic3');
    59. if(element.style.display=='none')
    60. {
    61. picture.src='minus.JPG';
    62. sendRequest('3');
    63. element.style.display='inline';
    64. }
    65. else
    66. {
    67. picture.src='plus.jpg';
    68. element.style.display='none';
    69. }
    70. }
    71. }
    72. //-->
    73. </script>
    Alles anzeigen


    ich schau mal das cih den code kleiner krieg

    danke schonmal grüße
    ----[Blockierte Grafik: http://www.smilie-harvester.de/smilies/Alltag/putzen.gif] Nein ich bin nicht die Signatur, ich Putz hier nur ---
  • ohhkay so sieht die funktion jetzt aus.. schon schöner ^^

    Quellcode

    1. <a href="#" onClick="klapptext('0')"><img id="pic0" src="plus.JPG" height="11,5px" width="10px"/> Feld 1 Nachladen</a><br />
    2. <a href="#" onClick="klapptext('1')"><img id="pic1" src="plus.JPG" height="11,5px" width="10px"/>Feld 2 Nachladen</a><br />
    3. <a href="#" onClick="klapptext('2')"><img id="pic2" src="plus.JPG" height="11,5px" width="10px"/>Feld 3 Nachladen</a><br />
    4. <a href="#" onClick="klapptext('3')"><img id="pic3" src="plus.JPG" height="11,5px" width="10px"/>Feld 4 Nachladen</a><br />


    Quellcode

    1. <script tyspe="text/javascript">
    2. <!--
    3. function klapptext(nr)
    4. {
    5. var element;
    6. var picture;
    7. element=document.getElementById('content'+nr);
    8. picture=document.getElementById('pic'+nr);
    9. if(element.style.display=='none')
    10. {
    11. picture.src='minus.JPG';
    12. sendRequest(nr);
    13. element.style.display='inline';
    14. }
    15. else
    16. {
    17. picture.src='plus.jpg';
    18. element.style.display='none';
    19. }
    20. }
    21. //-->
    22. </script>
    Alles anzeigen


    danke snowflake für deinen beitrag

    grüße
    ----[Blockierte Grafik: http://www.smilie-harvester.de/smilies/Alltag/putzen.gif] Nein ich bin nicht die Signatur, ich Putz hier nur ---
  • Hi Forum,

    es funzt zwar nun alles, allerdings ist mir ein schönheitsfehler aufgefallen als ich mit dem IE getestet hab. Im prinzip wär mir das egal, nur das kleine hässliche gelbe Dreieck mit ausrufezeichen im IE stört mich sehr.
    "Fehler auf der Seite".

    Folgende Fehlermeldung konnte ich mit Firebug entlocken


    Leerer String an getElementById() übergeben.
    onreadystatechange()()
    [Break on this error] ...ById(update).innerHTML = update[i+1];
    tagesansicht.php# (Linie 78)
    document.getElementById(update[i]) is null
    [Break on this error] ...ById(update[i]).innerHTML = update[i+1];


    Das sind meine Dummydateien:

    formular.html

    Quellcode

    1. <html><head>
    2. <script type="text/javascript">
    3. <!--
    4. function sendRequest(digit) {
    5. var req;
    6. try {
    7. req = window.XMLHttpRequest?new XMLHttpRequest():
    8. new ActiveXObject("Microsoft.XMLHTTP");
    9. } catch (e) {
    10. //Kein AJAX Support
    11. }
    12. req.onreadystatechange = function() {
    13. if ((req.readyState == 4) && (req.status == 200)) {
    14. var update = new Array();
    15. var response = req.responseText;
    16. if(response.indexOf('||' != -1)) {
    17. update = response.split('||');
    18. for(i=0; i<update.length; i+=2)
    19. document.getElementById(update[i]).innerHTML = update[i+1];
    20. }
    21. }
    22. };
    23. req.open('POST', 'func.php');
    24. req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    25. req.send('s='+digit);
    26. }
    27. //-->
    28. </script>
    29. <script tyspe="text/javascript">
    30. <!--
    31. function klapptext(nr)
    32. {
    33. var element;
    34. var picture;
    35. element=document.getElementById('content'+nr);
    36. picture=document.getElementById('pic'+nr);
    37. if(element.style.display=='none')
    38. {
    39. picture.src='minus.JPG';
    40. sendRequest(nr);
    41. element.style.display='inline';
    42. }
    43. else
    44. {
    45. picture.src='plus.jpg';
    46. element.style.display='none';
    47. }
    48. }
    49. //-->
    50. </script>
    51. <style type="text/css">
    52. <!--
    53. div {
    54. float:left;
    55. width:25%;
    56. font-size:12px;
    57. background-color:#e5e5e5;
    58. margin:10px;
    59. height:200px;
    60. width:30px;
    61. }
    62. //-->
    63. </style>
    64. </head>
    65. <body>
    66. <p />
    67. <a href="#" onClick="klapptext('0')"><img id="pic0" src="plus.JPG" height="11,5px" width="10px"/> Feld 1 Nachladen</a><br />
    68. <a href="#" onClick="klapptext('1')"><img id="pic1" src="plus.JPG" height="11,5px" width="10px"/>Feld 2 Nachladen</a><br />
    69. <a href="#" onClick="klapptext('2')"><img id="pic2" src="plus.JPG" height="11,5px" width="10px"/>Feld 3 Nachladen</a><br />
    70. <a href="#" onClick="klapptext('3')"><img id="pic3" src="plus.JPG" height="11,5px" width="10px"/>Feld 4 Nachladen</a><br />
    71. <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" class="example">
    72. <div id="content0" style="display:none">
    73. </div>
    74. <div id="content1" style="display:none">
    75. </div>
    76. <div id="content2" style="display:none">
    77. </div>
    78. <div id="content3" style="display:none">
    79. </div>
    80. </form>
    81. </body></html>
    Alles anzeigen


    func.php

    Quellcode

    1. <?
    2. function dummyOutput($htmlID)
    3. {
    4. echo $htmlID.'||';
    5. if($_POST['s'] == '0')
    6. {
    7. echo "Ja es geht ! :)";
    8. }
    9. if($_POST['s'] == '1')
    10. {
    11. echo "<img src='kunst.jpg'>";
    12. }
    13. if($_POST['s'] == '2')
    14. {
    15. echo "drittes";
    16. }
    17. if($_POST['s'] == '3')
    18. {
    19. echo "viertes";
    20. }
    21. echo '||';
    22. }
    23. $htmlID = 'content';
    24. dummyOutput($_POST['s'], $htmlID);
    25. ?>
    Alles anzeigen



    was verursacht den fehler?

    in der function sendRequest in der zeile mit

    Quellcode

    1. document.getElementById(update[i]).innerHTML = update[i+1];
    inhalt.

    Der gelesene Inhalt wird erst in ein Array gesplittet und dann wird dem HTML Element "content2" der Inhalt des nächsten Array Elements zugeordnet


    *aufm schlauch steh*

    grüße
    ----[Blockierte Grafik: http://www.smilie-harvester.de/smilies/Alltag/putzen.gif] Nein ich bin nicht die Signatur, ich Putz hier nur ---
  • Hi snowflake...

    gebe ich update mit alert aus erscheint kein alert fenster... also ist update zwar gesetzt aber leer. Das wusste ich aber schon dank firebug
    document.getElementById(update) is null
    , wie vorher auch schon beschrieben.

    Ich habe eben den code aus dem wiki halt meinen bedürftnissen angepasst, es funzt ja auch alles nur gibt es diesen komischen error... *immernochaufmschlauchsteh*

    hat einer evtl eine lösung? meinen quellcode habe ich im vorherigen post von mir schon geschrieben...

    danke schonmal

    grüße
    Timo
    ----[Blockierte Grafik: http://www.smilie-harvester.de/smilies/Alltag/putzen.gif] Nein ich bin nicht die Signatur, ich Putz hier nur ---
  • AJAX: Passwort ändern funktion

    hej danke d0nut klappt nun wunderbar. hätt mir aber auch auffallen können :whistling:

    So ich will nicht schon wieder einen Fred eröffnen, deshalb häng ich das einfach hier ran, in der Hoffung, dass der ausgelutschte Thread hier doch noch von jemand gelesen wird ^^

    UPDATE d0nut: ich stehe auf viele kleine Threads -> AJAX: Passwort ändern funktion
    ----[Blockierte Grafik: http://www.smilie-harvester.de/smilies/Alltag/putzen.gif] Nein ich bin nicht die Signatur, ich Putz hier nur ---

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von eseL ()