Javascript Weiterleitung und Php
alexander 4454
- javascript
Auf der Seite, die ich gerade erstelle, werden Termine aus einer Datenbank geladen und in einer Tabelle dargestellt. Der Benutzer kann diese Termine auch löschen. Wenn er jetzt auf löschen klickt, dann erscheint mit Javascript ein div-Element, bei dem er auswählen kann, ob er "nur diesen Termin löschen", "alle verknüpften Termine löschen" oder "nichts löschen will".
echo "<a href=\"javascript:show('del_window', '".$events_result['id']."');\">löschen</a>";
So sieht der Link "löschen" aus, dabei wird die Funtion show aufgerufen und die Parameter "del_window" (ist die der Name(id) des divs) und "id" (ist dann eine Zahl) mitgeben.
function show(fun_type, id) {
document.getElementById(fun_type).style.display='block';
var element = id;
}
So wird der div mit den drei Buttons geöffnet und die Variable element definert, damit ich nachher die Nummer des Termins mitsenden kann.
Im div gibt es jetzt zum Beispiel diesen Button:
<input value="Diesen Termin löschen" type="button" ONCLICK="window.location.href='javascript:hide(\u0022del_window\u0022,\u0022del_this\u0022)'" />
\u0022 verwende ich anstatt Anführungszeichen, da ich hier drei benötige. Die Funktion hide wird aufgerufen, mit dem Parameter "del_this" (anstatt "del_all").
function hide(fun_type, fun_what) {
document.getElementById(fun_type).style.display='none';
if ( fun_waht == del_this ) {
self.location.href="data_process.php?fun=del_event&id="+element;
} else if ( fun_what == del_all ) {
self.location.href="data_process.php?fun=del_all_events&id="+element;
}
}
Bei dieser Funktion wird der div wieder geschlossen und es soll z.B auf die Seite data_process.php?fun=del_event&id=34 weitergeleitet werden. 34 habe ich zuvor in die Variable element gespeichert.
Leider wird nur das Fenster geschlossen aber sonst geschieht nichts. Was mache ich falsch?
Danke!
Hallo,
echo "<a href=\"javascript:show('del_window', '".$events_result['id']."');\">löschen</a>";
So sieht der Link "löschen" aus
warum ist das ein Link? Ein Link dient normalerweise zum Aufruf einer neuen Ressource. Wenn du nur eine Javascript-Funktion aufrufen willst, wäre ein onclick-Handler auf einem anderen passenden Element sicher sinnvoller.
function show(fun_type, id) {
document.getElementById(fun_type).style.display='block';
var element = id;
}
> So wird der div mit den drei Buttons geöffnet und die Variable element definert, damit ich nachher die Nummer des Termins mitsenden kann.
Die variable element ist aber innerhalb der Funktion lokal und wird beim Beenden der Funktion sofort wieder entsorgt - sie ist also in der Form, wie du sie hier anlegst, völlig nutzlos.
> Im div gibt es jetzt zum Beispiel diesen Button:
> `<input value="Diesen Termin löschen" type="button" ONCLICK="window.location.href='javascript:hide(\u0022del_window\u0022,\u0022del_this\u0022)'" />`{:.language-html}
Autsch! Das Pseudoprotokoll javascript: ermöglicht zwar die Angabe von Javascript im href-Attribut eines Links, kann aber nicht direkt der href-Eigenschaft zugewiesen werden. Ist auch sinnlos, denn den Javascript-Code kann man doch auch direkt ausführen, anstatt ihn erst über zwei Umwege über location.href und das javascript:-Pseudoprotokoll zu schleifen. Das ist von hinten durch die Brust ins Knie!
Der folgende, vereinfachte Code erreicht dasselbe, was du mit der Doppelverschachtelung wohl erreichen willst:
> `<input value="Diesen Termin löschen" type="button" onclick="hide('del_window','del_this');" />`{:.language-html}
> \u0022 verwende ich anstatt Anführungszeichen, da ich hier drei benötige.
Nein, völlig unnötig.
> ~~~javascript
function hide(fun_type, fun_what) {
> document.getElementById(fun_type).style.display='none';
>
> if ( fun_waht == del_this ) {
> self.location.href="data_process.php?fun=del_event&id="+element;
> } else if ( fun_what == del_all ) {
> self.location.href="data_process.php?fun=del_all_events&id="+element;
> }
> }
Dass du einmal fun_what und einmal fun_waht notiert hast, sollte dir die Fehlerkonsole schon verraten haben.
Bei dieser Funktion wird der div wieder geschlossen und es soll z.B auf die Seite data_process.php?fun=del_event&id=34 weitergeleitet werden. 34 habe ich zuvor in die Variable element gespeichert.
Gespeichert und sofort wieder vergessen. Siehe oben.
So long,
Martin
Danke für das Aufmerksammachen auf die Fehler, ich habe sie jetzt richtig gestellt. Aber wie kann ich dann die Variable so setzten, dass sie überall gültig ist? Soll ich dann in der Funktion eine globale Variable aus element machen?
...
element = id;
einfach so? oder was ist da die beste Lösung, damit ich am Ende den Link data_process.php?fun=del_event&id=34 zusammenbekomme?
Also ich habe jetzt die Variable in der Funktion global definiert und sie an den Link mit +window.element; angehängt.
Leider funktioniert die Weiterleitung überhaupt nicht. Da muss ein Fehler sein??!