问题描述
我试图阻止用户在输入字段中输入非数字字符。 但是,用户仍然可以输入这些...我错过了什么??
<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 引擎中获得对现代浏览器技术的完全支持。