无法使document.getElementById(“”)。value或document.getElementById(“”)。innerHtml正常工作

时间:2019-01-10 18:14:18

标签: html vbscript hta

我有一个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中?

我想在精心制作的SQL查询中使用输入到HTML页面的数据。

1 个答案:

答案 0 :(得分:1)

我想出了答案!

如“ Teemu”所述,innerHtml将不起作用。我将所有这些都切换为.value,这不会引发错误,但是也没有将值从HTML传递到VBS。

我回到我的VBS脚本,将几乎所有内容都封装在一个Sub Main中,然后返回并向HTML中的Submit按钮添加了onclick事件,以调用Main()。现在,将使用文本字段中的数据填充变量。

所以发生的事情是HTA命中时将加载并调用VBS脚本。 VBS脚本会加载并执行所有代码,但是在运行时,不会填充正在检查.value的元素,因此变量也不会填充。

通过将逻辑封装在一个子代码中并在填写完字段后调用该子代码,代码将执行并找到现在填充的字段。