Sven Arno: Button führt Script Augenscheinlich nicht aus,Script fehlerhaft?

Hallo zusammen,
ich habe folgendes Problem, ich möchte in einem Formular einen Button einbinden zum Löschen eines Datensatzes. Dazu soll dieser Button ein Script aufrufen das 1. via Confirm die Richtigkeit das Aufrufs prüft 2. In ein verstecktes Formularfeld "true" schreibt 3. Submit aufruft.
Wobei 2 und 3 nur Optional auftreten je nach Ergebnis des Confirm.
So wie ich es bisher versucht habe tut sich leider nciht viel. Um genau zu sein tut sich absolut nichts. Wenn ich auf den Button Klicke tut sich bei mir nichts weder ein confirm noch ein submit noch sonst etwas. Ich habe den gesamten sourcecode unten gepostet.
Was etwaige weitere Fragen angeht, ich rufe die entsprechende Seite unter Firefox 3.0.1 auf einem Ubuntu System auf. Die Webseite ist im Intranet meines Labors auf einem Debian Etch Server. Im Browser ist JAvaScript natürlich aktiviert.
An sich denke ich muß ich bei JS was falsch gemacht haben. Zugegebenermaßen ist JS nicht meine Stärke aber ich empfand das für mein vorhaben als die angenehmste Lösung. Falls jemand eine bessere Idee hat, prinzipiell muß ich im nachfolgendem php Script nur wissen das gelöscht werden soll und brauche vorher die Sicherheitsbestätigung für den Vorgang.

schonmal Danke im vorraus

Sven Arno

Quellcode:
<html>
<head>
 <link href="../css/main.css" rel="stylesheet" type="text/css" />
 <link href="../css/adminForm.css" rel="stylesheet" type="text/css" />
 <script type="text/javascript">
  function delete(){
   if(window.confirm("Sind Sie sicher das Sie den Artikel L&ouml;schen m&ouml;chten?")){
         this.form.delete.value="true";
         this.form.submit();
        }
        return false;
     }
    </script>
</head>
<body>
 <h1>Artikel Bearbeiten - Deteil</h1>
 Einstelldatum: <!-- date -->

<form action="../scripte/editArticle.php" method="post">
  <fieldset>
  <legend>Titel</legend>
   <table>
    <tr>
     <td>
      <input name="title" type="Text" maxlength="100" value="# title #" class="text">
     </td>
    </tr>
   </table>
  </fieldset>

<fieldset>
  <legend>Text</legend>
   <table>
    <tr>
     <td>
      <textarea name="text" rows="20" class="text"><!-- text --></textarea>
     </td>
    </tr>
   </table>
  </fieldset>

<fieldset>
  <legend>Optionen</legend>
   <table>
    <tr>
     <td>
      <label for="category">Kategorie:</label>
      <select size="1" name="category" >
       <!-- category options -->
      </select>
     </td>
     <td>
      <label for="visible">Anzeigen:</label>
      <input type="checkbox" name="visible" # checked #>
     </td>
    </tr>
   </table>
  </fieldset>

<fieldset>
  <legend>Funktionen</legend>
   <table>
    <tr>
     <td>
      <input type="submit" name="send" value=" Absenden ">
           </td><td>
            <input type="reset" name="reset" value=" Reset">
     </td><td>
      <input type="button" name="deleteButton" value=" L&ouml;chen" onclick="delete()">
     </td><td>
           <input type="hidden" name="delete" value="false">
     </td>
    </tr>
   </table>
  </fieldset>
 </form>
</body>
</html>

  1. Hallo Sven,

    So wie ich es bisher versucht habe tut sich leider nciht viel. Um genau zu sein tut sich absolut nichts. Wenn ich auf den Button Klicke tut sich bei mir nichts weder ein confirm noch ein submit noch sonst etwas. Ich habe den gesamten sourcecode unten gepostet.

      
    <script type="text/javascript">  
        function delete(){  
            if(window.confirm("Sind Sie sicher das Sie den Artikel L&ouml;schen m&ouml;chten?")){  
                this.form.delete.value="true";  
                this.form.submit();  
            }  
            return false;  
         }  
    </script>
    

    <input type="button" name="deleteButton" value=" L&ouml;chen" onclick="delete()">
         </td><td>
               <input type="hidden" name="delete" value="false">
         </td>

    erstens trägt Deine Funktion einen ungünstigen Namen: delete().
    Javascript hat einen http://de.selfhtml.org/javascript/sprache/operatoren.htm#delete@title=delete-Operator, daher findest Du nicht überraschend delete in der <http://de.selfhtml.org/javascript/sprache/reserviert.htm@title=Liste der reservierten Wörter> von Javascript.

    Abgesehen davon solltest Du Elementen keinen Namen geben, den Du bereits für Funktionen verwandt hast. Zumindest der IE hat damit Probleme.

    Du solltest entweder HTML oder XHTML schreiben und dazu den passenden Doctype verwenden. Deinen Code schreibst Du am besten in einer Codierung, die es ermöglicht, Zeichen direkt zu notieren. Keine Ahnung, wann ich zum letzten mal &ouml; verwendet habe. In Javascript hat sowas sowieso keine Auswirkung, Javascript-Ausgaben sind kein HTML.

    Ach ja: solange Du noch testest, ist es eine gute Idee, das versteckte Feld nicht zu verstecken :-)

    Freundliche Grüße

    Vinzenz

  2. Wobei 2 und 3 nur Optional auftreten je nach Ergebnis des Confirm.
    So wie ich es bisher versucht habe tut sich leider nciht viel. Um genau zu sein tut sich absolut nichts.

    Das wird nicht stimmen, hast du mal einen Blick in die Fehlerkonsole geworfen?

    <script type="text/javascript">
      function delete(){
       if(window.confirm("Sind Sie sicher das Sie den Artikel L&ouml;schen m&ouml;chten?")){
             this.form.delete.value="true";
             this.form.submit();

    du kannst hier nicht this.form schreiben, da this das window Objekt ist und das keine Eigenschaft form hat.

    Du willst beim klick das Formularobjekt als Parameter übergeben

    <input type="button" name="deleteButton" value=" Löschen" onclick="deleteItem(this)">  
    
    

    und dann:

    function deleteItem(el){  
    if(window.confirm("Sind Sie sicher das Sie den Artikel löschen möchten?")){  
              el.form.delete.value="true";  
              el.form.submit();  
    ...  
    
    

    Struppi.

    1. Hi, besten Dank, mit der Änderung Funktioniert es nun so wie ich es mir vorgestellt habe :-).

      1. Mahlzeit Sven Arno,

        Hi, besten Dank, mit der Änderung Funktioniert es nun so wie ich es mir vorgestellt habe :-).

        ... aber vielleicht nicht so wie Deine Nutzer es sich vorstellen. Wenn einer kein Javascript aktiviert hat, kann er nichts löschen. Wenn einer findig ist und den Quellcode Deiner Seite lokal speichert, in das versteckte Formularfeld "true" schreibt und dann das Formular direkt abschickt, kann er das auch ohne Javascript-Prüfung tun.

        Merke: Javascript ist allenfalls für optionale Gimmicks und Benutzerführung da - ein Formular MUSS auch ohne funktionieren und SÄMTLICHE Validierungen, Prüfungen u.ä. MÜSSEN auf dem Server erfolgen ... ansonsten öffnest Du Manipulationen Tür und Tor.

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|