首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HTA -验证条目

HTA -验证条目
EN

Stack Overflow用户
提问于 2021-07-13 10:22:01
回答 2查看 84关注 0票数 2

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

代码语言:javascript
复制
<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的语言。

EN

回答 2

Stack Overflow用户

发布于 2021-07-15 11:22:47

一个简单的解决方案是使用下拉菜单,其值在3-10之间。

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

代码语言:javascript
复制
<!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的代码...

代码语言:javascript
复制
<!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>
票数 2
EN

Stack Overflow用户

发布于 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引擎中不会完全支持现代浏览器技术。

有用的链接

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68355735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档