我试图阻止用户在输入字段中输入非数字字符。但是,用户仍然可以在...中键入这些内容我遗漏了什么??
<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的语言。
发布于 2021-07-15 11:22:47
一个简单的解决方案是使用下拉菜单,其值在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>以上版本在显示非数字字符后对其进行过滤,因此非数字字符为"flash“。
下面的代码使用OnInput,因此过滤掉了非数字字符,永远不会显示。一个潜在的缺点是OnInput需要将兼容模式设置为ie=9,而在ie=9中,你必须始终调用Sub或函数(带括号)。你不能直接在HTML代码中使用VBScript (例如,OnFocus="ActionNo.Focus“不起作用)。这些限制并不是什么大问题。
请注意,ie=10、ie=11和ie=edge模式不支持VBScript,也不支持HTA:APPLICATION部分。那些新的模式仍然不能正确支持输入类型"number“。如果他们这样做了,我建议用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>发布于 2021-07-13 14:04:48
Microsoft HTA (mshta.exe)是一种专有技术based around the Internet Explorer 9 engine,它将先于大多数符合标准的HTML5功能。
微软的互联网浏览器过去一直以不符合标准而臭名昭著,但随着基于Chromium项目的新Edge浏览器的出现,一切都改变了(不要误认为Microsoft Edge的第一次迭代,这也是微软最终放弃的一项专有尝试)。
由于MSHTA基于旧的浏览器引擎,因此默认情况下不支持诸如HTML5之类的新功能。有"shims" or "polyfills" (可以添加或扩展缺少的功能的脚本,但主要用于JScript),但在旧的IE引擎中不会完全支持现代浏览器技术。
有用的链接
https://stackoverflow.com/questions/68355735
复制相似问题