2016-03-26 18 views
0

Versucht, mehrere HTML-Formulare an eine VBScript-Funktion zu senden. Der Zweck der Funktion ist das Aktualisieren einer Textdatei. Abhängig davon, welcher Textbereich zur Aktualisierung übermittelt wird, sollte festgelegt werden, welche Textdatei die Funktion aktualisiert. Im Grunde brauchen Sie nur eine Funktion, um Dateiupdates für alle Textbereiche zu handhaben. Hier ist ein Codeausschnitt.Übergeben Sie mehrere HTML-Formulare an die VBScript-Funktion

Die Onload-Funktion lädt den Text, der sich derzeit in den Textdateien befindet, in die Textbereiche.

Die Funktionen F1 und F2 kopieren die Textbereiche in die Zwischenablage. Im Grunde ist dies nur eine einfache Zwischenablage.

Sie können sehen, wie ich dieses Konzept tatsächlich auf jede Funktion anwenden muss. Mehrere Formulare, die alle an einzelne Funktionen übergeben werden (Lesen, Schreiben und Kopieren).

<head> 
<title>Quick Comments</title> 
<HTA:APPLICATION 
    APPLICATIONNAME="Quick Comments" 
    SCROLL="YES" 
> 
</head> 
<script language="VBScript"> 
    sub Window_onLoad() 
     set oFSO=CreateObject("Scripting.FileSystemObject") 
     set oFile=oFSO.OpenTextFile("signature.txt",1) 
     text=oFile.ReadAll 
     document.all.var1.value=text 
     oFile.Close 
     set oFile=oFSO.OpenTextFile("initial.txt",1) 
     text=oFile.ReadAll 
     document.all.var2.value=text 
     oFile.Close 
    end sub 
    sub FileUpdate 
     Dim TheForm 
     Set TheForm = Document.field1 
     Set objFileToWrite = CreateObject("Scripting.FileSystemObject").OpenTextFile("signature.txt",2,true) 
     objFileToWrite.WriteLine(TheForm.signature.value) 
     objFileToWrite.Close 
     Set objFileToWrite = Nothing 
    end sub 
    sub F1 
     Dim TheForm 
     Set TheForm = Document.field1 
     Set WshShell = CreateObject("WScript.Shell") 
     WshShell.Run "cmd.exe /c echo " & TheForm.signature.value & " | clip", 0, TRUE 
    end sub 
    sub F2 
     Dim TheForm 
     Set TheForm = Document.field2 
     Set WshShell = CreateObject("WScript.Shell") 
     WshShell.Run "cmd.exe /c echo " & TheForm.initial.value & " | clip", 0, TRUE 
    end sub 
</script> 
<body> 
    <h1>Quick Comments</h1><hr> 
    <form id="field1" name="field1"> 
     <textarea name="var1" id='signature' cols=75 rows=8></textarea> 
     <input type="button" name="copy" value="Copy" onclick="F1" language="vbscript"> 
     <input type="button" name="update" value="Update" onclick="FileUpdate" language="vbscript"> 
    </form> 
    <form id="field2" name="field2"> 
     <textarea name="var2" id='initial' cols=75 rows=8></textarea> 
     <input type="button" name="copy" value="Copy" onclick="F2" language="vbscript"> 
     <input type="button" name="copy" value="Copy" onclick="F1" language="vbscript"> 
    </form> 
</body> 

Antwort

0

Betrachten Sie die folgenden Beispiele basierend auf Ihrem Code. Es gibt separate Procs WriteTextFile und ReadTextFile für Lese-Schreib-Operationen, auch ich wechselte zu window.clipboardData.SetData Zwischenablage-Steuermethode. Ich nehme an, dass Textdateien im selben Ordner wie HTA, der Pfad zu diesem Ordner in strHtaFolder Variable gespeichert ist. Beachten Sie, dass <textarea> Tag .name Eigenschaft verwendet wird, um den Dateinamen zu aktualisieren.

erste verwendet die notwendigen window.event.srcElement.parentNode.childNodes(0)<textarea> Knoten von dem aktuellen event Objekt abzuzurufen:

<html> 
<head> 
    <title>Quick Comments</title> 
    <HTA:APPLICATION 
     ID="oHTA" 
     APPLICATIONNAME="Quick Comments" 
     SCROLL="YES" 
    > 
    </head> 
    <script language="VBScript"> 

     Dim strHtaFolder 

     Sub Window_onLoad() 
      strHtaFolder = CreateObject("Scripting.FileSystemObject").GetParentFolderName(Replace(oHTA.commandLine, """", "")) & "\" 
      document.all.signature.value = ReadTextFile(strHtaFolder & "signature.txt", -2) ' -2 - System default, -1 - Unicode, 0 - ASCII 
      document.all.initial.value = ReadTextFile(strHtaFolder & "initial.txt", -2) 
     End Sub 

     Sub FileUpdate() 
      Dim objForm, objTextArea 
      Set objForm = window.event.srcElement.parentNode 
      Set objTextArea = objForm.childNodes(0) 
      WriteTextFile objTextArea.value, strHtaFolder & objTextArea.name & ".txt", -2 
     End Sub 

     Sub CopyText() 
      Dim objForm, objTextArea 
      Set objForm = window.event.srcElement.parentNode 
      Set objTextArea = objForm.childNodes(0) 
      window.clipboardData.SetData "text", objTextArea.value 
     End Sub 

     Function ReadTextFile(strPath, lngFormat) 
      ' lngFormat -2 - System default, -1 - Unicode, 0 - ASCII 
      With CreateObject("Scripting.FileSystemObject").OpenTextFile(strPath, 1, False, lngFormat) 
       ReadTextFile = "" 
       If Not .AtEndOfStream Then ReadTextFile = .ReadAll 
       .Close 
      End With 
     End Function 

     Sub WriteTextFile(strContent, strPath, lngFormat) 
      ' lngFormat -2 - System default, -1 - Unicode, 0 - ASCII 
      With CreateObject("Scripting.FileSystemObject").OpenTextFile(strPath, 2, True, lngFormat) 
       .Write (strContent) 
       .Close 
      End With 
     End Sub 

    </script> 
    <body> 
     <h1>Quick Comments</h1><hr> 
     <form id="field1" name="field1"> 
      <textarea name="signature" id='signature' cols=75 rows=8></textarea> 
      <input type="button" name="copy" value="Copy" onclick="CopyText()" language="vbscript"> 
      <input type="button" name="update" value="Update" onclick="FileUpdate()" language="vbscript"> 
     </form> 
     <form id="field2" name="field2"> 
      <textarea name="initial" id='initial' cols=75 rows=8></textarea> 
      <input type="button" name="copy" value="Copy" onclick="CopyText()" language="vbscript"> 
      <input type="button" name="update" value="Update" onclick="FileUpdate()" language="vbscript"> 
     </form> 
    </body> 
</html> 

Und das zweite Beispiel leicht verändert. Er speichert auf Fenster Last sowohl Signatur und Ausgangselemente zu einem Array, und später, wenn die Taste gedrückt es gelangt nur den Index des Elements in dem Array zu dem Unter, wenn ein Ereignis eintritt:

<html> 
<head> 
    <title>Quick Comments</title> 
    <HTA:APPLICATION 
     ID="oHTA" 
     APPLICATIONNAME="Quick Comments" 
     SCROLL="YES" 
    > 
    </head> 
    <script language="VBScript"> 

     Dim strHtaFolder, arrItems 

     Sub Window_onLoad() 
      arrItems = Array(document.all.signature, document.all.initial) 
      strHtaFolder = CreateObject("Scripting.FileSystemObject").GetParentFolderName(Replace(oHTA.commandLine, """", "")) & "\" 
      arrItems(0).value = ReadTextFile(strHtaFolder & "signature.txt", -2) ' -2 - System default, -1 - Unicode, 0 - ASCII 
      arrItems(1).value = ReadTextFile(strHtaFolder & "initial.txt", -2) 
     End Sub 

     Sub FileUpdate(strItem) 
      WriteTextFile arrItems(strItem).value, strHtaFolder & arrItems(strItem).name & ".txt", -2 
     End Sub 

     Sub CopyText(strItem) 
      window.clipboardData.SetData "text", arrItems(strItem).value 
     End Sub 

     Function ReadTextFile(strPath, lngFormat) 
      ' lngFormat -2 - System default, -1 - Unicode, 0 - ASCII 
      With CreateObject("Scripting.FileSystemObject").OpenTextFile(strPath, 1, False, lngFormat) 
       ReadTextFile = "" 
       If Not .AtEndOfStream Then ReadTextFile = .ReadAll 
       .Close 
      End With 
     End Function 

     Sub WriteTextFile(strContent, strPath, lngFormat) 
      ' lngFormat -2 - System default, -1 - Unicode, 0 - ASCII 
      With CreateObject("Scripting.FileSystemObject").OpenTextFile(strPath, 2, True, lngFormat) 
       .Write (strContent) 
       .Close 
      End With 
     End Sub 

    </script> 
    <body> 
     <h1>Quick Comments</h1><hr> 
     <form id="field1" name="field1"> 
      <textarea name="signature" id='signature' cols=75 rows=8></textarea> 
      <input type="button" name="copy" value="Copy" onclick="CopyText(0)" language="vbscript"> 
      <input type="button" name="update" value="Update" onclick="FileUpdate(0)" language="vbscript"> 
     </form> 
     <form id="field2" name="field2"> 
      <textarea name="initial" id='initial' cols=75 rows=8></textarea> 
      <input type="button" name="copy" value="Copy" onclick="CopyText(1)" language="vbscript"> 
      <input type="button" name="update" value="Update" onclick="FileUpdate(1)" language="vbscript"> 
     </form> 
    </body> 
</html> 

BTW, Verwendung von <form> Tags ist nicht notwendig, Sie könnten e. G. <div> Tags stattdessen.

Verwandte Themen