FLA: Varienablenübergabe zwischen JavaScript und VBScript

Hi !

Ich arbeite gerade an einer ASP-Seite, in der in einer Javascript-Funktion überprüft wird, ob eine Checkbox aktiviert oder deaktiviert wurde. Die Funktion erzeugt einen Wert, den ich im VBScript-Teil (Ausgabe in Datenbank) weiterverarbeiten möchte. Schreibe ich diesen Wert in eine (JavaScript-)Variable, kann diese im VBScript-Teil nicht ausgewertet werden ?

Wie kann ich diese Variable übergeben ?

Danke schon mal im voraus !

FLA

  1. Hallo FLA,

    Ich arbeite gerade an einer ASP-Seite, in der in einer Javascript-Funktion überprüft wird, ob eine Checkbox aktiviert oder deaktiviert wurde.

    Du verwendest Checkboxen, also hast Du ein Formular -> diesen Funktionsausgabewert in ein hidden input-Feld schreiben:

    document.myform.myhiddenelement.value = mycheckfunction();

    Die Funktion erzeugt einen Wert, den ich im VBScript-Teil (Ausgabe in Datenbank) weiterverarbeiten möchte. Schreibe ich diesen Wert in eine (JavaScript-)Variable, kann diese im VBScript-Teil nicht ausgewertet werden ?

    Wie kann ich diese Variable übergeben ?

    und das Formular serverseitig auslesen:

    myvarvbs = request.form("myhiddenelement")

    aber Du kannst (einfacher) doch direkt serverseitig prüfen, ob request.form ("mycheckbox") einen Wert enthält, die Checkbox also aktiviert war.

    Grüsse
    Uwe

    1. Hi Leute !
      Danke für Eure Antworten. Ich hab' jetzt den ganzen Mittag rumprobiert und komm leider trotzdem nicht weiter.

      Vielleicht könnt Ihr mir anhand des Scripts sagen, an welcher Stelle was geändert / eingefügt werden muß. Vielen Dank schon mal im voraus !

      <html>
       <head>
        <meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
        <meta http-equiv="expires" content="0">
        <meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
       <title>Medien-Verwaltung</title>
       </head>
       <body>

      <h1>MEDIEN-VERWALTUNG</h1>
      <h2>Alle Medien</h2>

      <%
      strOrdnen = Request.Querystring("Order")
      strConnection = "Driver={Microsoft Access Driver (*.mdb)};DBQ="
      strConnection = strConnection & Server.MapPath("medien.mdb")
      strConnection = strConnection & ";DriverID=25;FIL=MS Access;MaxBufferSize=512;PageTimeout=15;"

      Set conn = Server.Createobject("ADODB.Connection")
      conn.Open strConnection

      strSQL = "SELECT * FROM domino ORDER BY [domino.Datum] "

      If strOrdnen = "ID" Then
      strSQL = "SELECT * FROM domino ORDER BY [domino.ID] "
      strSortierung = "Order=ID"
      End If

      If strOrdnen = "Datum" Then
      strSQL = "SELECT * FROM domino ORDER BY [domino.Datum] "
      strSortierung = "Order=Datum"
      End If

      If strOrdnen = "Aktion" Then
      strSQL = "SELECT * FROM domino ORDER BY [domino.Aktion] "
      strSortierung = "Order=Aktion"
      End If

      If strOrdnen = "Antragssteller" Then
      strSQL = "SELECT * FROM domino ORDER BY [domino.Antragssteller] "
      strSortierung = "Order=Antragssteller"
      End If

      If strOrdnen = "Telefon" Then
      strSQL = "SELECT * FROM domino ORDER BY [domino.Telefon] "
      strSortierung = "Order=Telefon"
      End If

      If strOrdnen = "Server" Then
      strSQL = "SELECT * FROM domino ORDER BY [domino.Server] "
      strSortierung = "Order=Server"
      End If

      If strOrdnen = "Medium" Then
      strSQL = "SELECT * FROM domino ORDER BY [domino.Medium] "
      strSortierung = "Order=Medium"
      End If

      If strOrdnen = "Erledigt" Then
      strSQL = "SELECT * FROM domino ORDER BY [domino.Erledigt] "
      strSortierung = "Order=Erledigt"
      End If

      Set rs = conn.Execute(strSQL)
      %>

      <!-- Anzahl der vorhandenen Datensätze -->
      <br><p>Haben Sie bitte etwas Geduld.</p>

      <%
      strAnzahl = 0
      Do While Not (rs.EOF)
      strAnzahl = strAnzahl + 1
      rs.MoveNext
      Loop
      %>

      <p>Zur Zeit sind <font color="#2222ff"><b><%= strAnzahl %> Medien</b></font> in der Datenbank eingetragen.</p>

      <!-- Anzeigen der Datensätze -->

      <%
      rs.MoveFirst
      %>

      <table border="1" bordercolor="#000000" borderspacing="0">
        <tr valign="baseline">
           <td bgcolor="#cccccc" width="90"><a href="domino_search_all.asp?Order=ID"><img src="bilder/down.gif" border="0"></a><b>ID</b></td>
        <td bgcolor="#cccccc" width="90"><a href="domino_search_all.asp?Order=Datum"><img src="bilder/down.gif" border="0"></a><b>Datum</b></td>
        <td bgcolor="#cccccc" width="90"><a href="domino_search_all.asp?Order=Aktion"><img src="bilder/down.gif" border="0"></a><b>Aktion</b></td>
        <td bgcolor="#cccccc" width="90"><a href="domino_search_all.asp?Order=Antragssteller"><img src="bilder/down.gif" border="0"></a><b>Antragssteller</b></td>
        <td bgcolor="#cccccc" width="90"><a href="domino_search_all.asp?Order=Telefon"><img src="bilder/down.gif" border="0"></a><b>Telefon</b></td>
        <td bgcolor="#cccccc" width="90"><a href="domino_search_all.asp?Order=Server"><img src="bilder/down.gif" border="0"></a><b>Server</b></td>
        <td bgcolor="#cccccc" width="90"><a href="domino_search_all.asp?Order=Medium"><img src="bilder/down.gif" border="0"></a><b>Medium</b></td>
        <td bgcolor="#cccccc" width="90" height="30"><a href="domino_search_all.asp?Order=Erledigt"><img src="bilder/down.gif" border="0"></a><b>Erledigt<br>
            </b></td>

      <%
      nr = 0
      DIM wert
      Do While Not (rs.EOF)
      strVar = rs("Datum")
      %>

      <tr valign="baseline">
           <FORM name="idform" METHOD=POST>
           <%
           nr = nr + 1
           %>
           <td bgcolor="#cccccc"><input name="<%= "text" & nr %>" type=text maxlength=3 value=<%= rs("ID") %> disabled></td>
       <td bgcolor="#ffffff"><%= rs("Datum") %></td>
       <td bgcolor="#ffffff"><%= rs("Aktion") %></td>
       <td bgcolor="#ffffff" nowrap><%= rs("Antragssteller") %></td>
       <td bgcolor="#ffffff" nowrap><%= rs("Telefon") %></td>
       <td bgcolor="#ffffff" nowrap><%= rs("Server") %></td>
       <td bgcolor="#ffffff" nowrap><%= rs("Medium") %></td>
       <td bgcolor="#ffffff" nowrap>

      <INPUT TYPE=CHECKBOX NAME="<%= "name" & nr %>" value=<%= rs("ID") %> onClick="FktSet(this);"></td>

      <p>Name : <%= nr %></p>

      <%
      rs.MoveNext
      Loop
      %>

      </table>
      </form>
      <FORM name="kannrausform" METHOD=POST>
      <td bgcolor="#cccccc"><input name="<%= "kannraus" %>" type=text maxlength=3 disabled></td>
      </FORM>
      <%

      rs.Close
      conn.Close
      %>

      <br><input type="submit" name="add" value="Add Record">

      </body>
      </html>

      <script language="JavaScript" type="text/javascript">
      function FktSet(objekt)

      {
        if (objekt.checked == 1) {

      kannrausform.kannraus.value = "Aktiviert" + objekt.value;

      }
        else {
        kannrausform.kannraus.value = "Deaktiviert" + objekt.value;
        }
      }
      </script>

      1. Hi FLA,

        nochmal:

        ein DELETE FROM ... WHERE ....  ist in deinem Fall (at least)nur auf dem Server möglich, dazu mußt du dem Server in einem Request mitteilen, was er löschen soll, nämlich möglichst anhand der Datensatz-ID

        Du zeigst dem Client deine Datensätze in einer Liste an, mit einer Checkbox davor. Egal wie oft der Client (der Surfer) jetzt auf die Checkbox klickt, er schickt damit keinen Request an den Server um das Delete Statement auszuführen. Das Betätigen von HTML-Formular Elementen ist grundsätzlich clientseitig bis zum Betätigen eines submit-Buttons.

        Wenn du aktiviertes Javascript bei allen Surfern deiner Seite voraussetzen kannst, dann gibt es einen Ansatz, nämlich so ähnlich wie du begonnen hast. Du kannst bei jedem Anklicken über eine Javascript-Prozedur den Wert des geklickten Checkbox-Elements (könnte die Datensatz-ID sein) in ein verborgenes Inputfeld in einem zweiten Formular schreiben. Aber dieses zweite Formular mußt du dann an den Server schicken um eine serverseitige Aktion einzuleiten.

        Oder du steuerst das Absenden des Formulars, in welchem die Checkboxen sind, automatisch über den onClick-Eventhandler, was ich aber lästig finden würde.

        Ich hoffe, ich konnte dir mit Klärung weiterhelfen.

        Tschö, Frank

  2. Hallo,

    soweit ich weiss, kann man die SJ Funktionen aus ASP heraus aufrufen.
    Du kannst doch über return(); den Wert dann übergeben.

    <script language="jscript">

    function test
    {
     return ....;

    }

    </script>

    <%

    Wert=test()

    %>

    so sollte es funktionieren.

    Samurai

    1. Hi.

      soweit ich weiss, kann man die SJ Funktionen aus ASP heraus aufrufen.
      Du kannst doch über return(); den Wert dann übergeben.

      Nein, das geht hier nicht.

      <script language="jscript">

      function test
      {
      return ....;

      }

      </script>

      Denn diese Funktion bzw. dieser Teil läuft im Client (Browser)...

      <%

      Wert=test()

      %>

      ...und der hier auf dem Server. Die Übergabe geht nur über ein Formular.

      Gruß,
      Martin

      1. Hallo Martin,

        das ist richtig. Ich habe etwas vergesen.
        Es muss so geschrieben werden:

        <script language="jscript" runat="server">

        </script>

        Das funktioniert einwandfrei.

        Samurai

        1. Hallo Martin,
          das ist richtig. Ich habe etwas vergesen.
          Es muss so geschrieben werden:
          <script language="jscript" runat="server">
          </script>
          Das funktioniert einwandfrei.
          Samurai

          Hi Samurai!

          du hast irgendwie die Aufgaben/Fragenstellung etwas durcheinandergewürfelt. Es geht darum, ein Formularfeld beim Client zu validieren und dann auf dem Server unter ASP mit VBS weiterzuverarbeiten.

          Mit dem Zusatz runat="server" weist du an, dass das Javascript auf dem Server ausgeführt werden soll. Das Anklicken einer Checkbox in HTML ist aber alleine Client-Sache, der Server erfährt davon nichts bis das entsprechende Formular abgesendet wird und damit ein neuer Request gestartet wird.

          Gruß, Frank