HTA - 验证条目 有用的链接

问题描述

我试图阻止用户在输入字段中输入非数字字符。 但是,用户仍然可以输入这些...我错过了什么??

<input type="number" size="5" id="ActionNo" min="3" max="10" step="1" pattern="^[0-9]{0,2}$" title="Numbers only,please." maxLength="2" />

输入无效字符也不会弹出错误提示

用户输入一个字符来检查它是否有效时,我是否必须编写一个函数。 如果我必须这样做,我该如何阻止输入框失去焦点?

我使用 VBScript 作为此 HTA 的语言

解决方法

一个简单的解决方案是使用包含 3-10 值的下拉菜单。

但是,如果您真的希望 HTA/VBS 中的输入框限制用户只能输入数字并且要求该数字在 3-10 的范围内,则代码如下:

<!DOCTYPE html>
<html>
<head>
<script language="VBScript">

Sub Filter
  UserInput = ActionNo.Value
  Set re = New RegExp
  re.Pattern = "[\D]"
  ActionNo.Value = re.Replace(UserInput,"")
End Sub

Sub Validate
  If ActionNo.Value<3 Or ActionNo.Value>10 Then
    ActionNo.Value = ""
    FocusHepler.Focus
  End If
End Sub

</script>
<style>
#FocusHepler {border:none; outline:none; border-color:transparent}
</style>
</head>
<body>
  <input type="text" size="5" id="ActionNo" MaxLength="2" OnKeyUp="Filter" OnChange="Validate">
  <input type="text" size="1" id="FocusHepler" OnFocus="ActionNo.Focus">
</body>
</html>

以上版本在非数字字符显示后过滤掉非数字字符,所以非数字字符会“闪现”。

下面的代码使用 OnInput,因此非数字字符被过滤掉并且从不显示。一个潜在的缺点是 OnInput 需要将兼容模式设置为 ie=9。如果 ie=9,您必须始终调用 Sub 或 Function(带括号)。您不能直接在 HTML 代码中使用 VBScript(例如 OnFocus="ActionNo.Focus" 不起作用)。这些限制没什么大不了的。

请注意 ie=10、ie=11 和 ie=edge 模式不支持 VBScript,也不支持 HTA:APPLICATION 部分。那些较新的模式仍然不能正确支持输入类型“数字”。如果他们这样做了,我会建议用 JavaScript 重写该项目。

这是使用 OnInput 的代码...

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="x-ua-compatible" content="ie=9">

<script language="VBScript">

Sub Filter
  UserInput = ActionNo.Value
  Set re = New RegExp
  re.Pattern = "[\D]"
  ActionNo.Value = re.Replace(UserInput,"")
End Sub

Sub Validate
  If ActionNo.Value<3 Or ActionNo.Value>10 Then
    ActionNo.Value = ""
    FocusHepler.Focus
  End If
End Sub

Sub ReFocus
  ActionNo.Focus
End Sub

</script>
<style>
#FocusHepler {border:none; outline:none; border-color:transparent}
</style>
</head>
<body>
  <input type="text" size="5" id="ActionNo" MaxLength="2" OnInput="Filter()" OnChange="Validate()">
  <input type="text" size="1" id="FocusHepler" OnFocus="ReFocus()">
</body>
</html>
,

Microsoft HTA (mshta.exe) 是一项专有技术 based around the Internet Explorer 9 engine,它将早于大多数符合标准的 HTML5 功能。

Microsoft Internet 浏览器过去因不符合标准而臭名昭著,但随着基于 Chromium 项目的新 Edge 浏览器的到来,这一切都发生了变化(不要误认为 Microsoft Edge 的第一次迭代,这又是微软最终放弃的专有尝试)。

由于 MSHTA 基于旧浏览器引擎,因此默认情况下将不支持 HTML5 等较新功能。有 "shims" or "polyfills"(可以添加或扩展缺失功能的脚本,但主要用于 JScript),但您不会在旧的 IE 引擎中获得对现代浏览器技术的完全支持。