Не удается получить document.getElementById (""). Value или document.getElementById (""). InnerHtml для работы - PullRequest
0 голосов
/ 10 января 2019

У меня есть HTA, у которого есть несколько полей <input type="text"> для ввода данных пользователями. Я пытаюсь передать эти данные в VBScript.

Вот HTML:

<div id="tableContent" name="tableContent" style="display:block;">
<table>
  Broad Search
  <tr>
    <th>Date</th>
    <th>Employee ID</th>
  </tr>
  <tr>
    <td><input type="text" id="dateInput" name="dateIDInput" size="10"></td>
    <td><input type="text" id="employeeIDInput" name="employeeIDInput" size="8"></td>
  </tr>
</table>
<br/>
<table>
  Specific Search
  <tr>
    <th>WO Base ID</th>
    <th>Lot ID</th>
    <th>Split ID</th>
    <th>Sub ID</th>
    <th>Operation</th>
  </tr>
  <tr>
    <td><input type="text" id="woBaseIDInput" name="woBaseIDInput" value="" size="7"/></td>
    <td><input type="text" id="woLotIDInput" name="woLotIDInput" value="" size="3"/></td>
    <td><input type="text" id="woSplitIDInput" name="woSplitIDInput" value="" size="3"/></td>
    <td><input type="text" id="woSubIDInput" name="woSubIDInput" value="" size="3"/></td>
    <td><input type="text" id="woOpInput" name="woOpInput" value="" size="3"/></td>
  </tr>
</table>

А вот VBScript:

'The following code retrieves the user supplied data.
Set woBaseIDInput = document.getElementById("woBaseIDInput")
Set woLotIDInput = document.getElementById("woLotIDInput")
Set woSplitIDInput = document.getElementById("woSplitIDInput")
Set woSubIDInput = document.getElementById("woSubIDInput")
Set woOpInput = document.getElementById("woOpInput")
Set dateInput = document.getElementById("dateInput")
Set employeeIDInput = document.getElementById("employeeIDInput")
Set outputTableElement = document.getElementById("outputTable")

'The following code will sanitize user input. Only numbers and characters are allowed.
stringsToCheck = Array(woBaseIDInput, woLotIDInput, woSplitIDInput, woSubIDInput, woOpInput, dateInput, employeeIDInput)
Set regExp = New RegExp
regExp.IgnoreCase = True
regExp.Global = True
regExp.Pattern = "[^a-z0-9]" 'Add here every character you don't consider as special character

woBaseIDClean = regExp.Replace(woBaseIDInput.innerHtml, "")
woLotIDClean = regExp.Replace(woLotIDInput.innerHtml, "")
woSplitIDClean = regExp.Replace(woSplitIDInput.innerHtml, "")
woSubIDClean = regExp.Replace(woSubIDInput.innerHtml, "")
woOpClean = regExp.Replace(woOpInput.innerHtml, "")
dateClean = regExp.Replace(dateInput.innerHtml, "")
employeeIDClean = regExp.Replace(employeeIDInput.innerHtml, "")

Проблема в woBaseIDClean, и все его друзья (в нижней части блока кода VBS) не заполняются данными из полей HTML.

Я пытался использовать .innerHtml и .value, оба из которых не работают. Я заметил, что иногда кажется, что использование .innerHtml устанавливает переменную для объекта?

.value ничего не делает (я думаю).

Когда я использую .outerHtml, я получаю весь элемент, теги и все, как и ожидалось.

Что я делаю не так? Как я могу получить предоставленные пользователем данные в мой VBScript?

Я хотел бы использовать данные, введенные на страницу HTML, в специально сформированном SQL-запросе.

1 Ответ

0 голосов
/ 10 января 2019

Я понял свой ответ!

Как пишет "Teemu", innerHtml не будет работать. Я переключил все это на .value, который не выдавал ошибок, но также не передавал значения из HTML в VBS.

Я вернулся к своему VBS-сценарию и вложил почти все в Sub Main, а затем вернулся и добавил событие onclick к кнопке отправки в HTML, чтобы вызвать Main (). ТЕПЕРЬ переменные заполнены данными из текстового поля.

Итак, HTA будет загружать и вызывать сценарии VBS при попадании. Скрипты VBS загружаются, и весь их код выполняется, но во время выполнения элементы, которые он проверяет .value, не заполняются, поэтому также не являются переменными.

Путем включения логики в подпрограмму и вызова подпункта ПОСЛЕ того, как поля заполнены, код выполняется и находит заполненные поля.

...