【问题标题】:HTA - Validate EntryHTA - 验证条目
【发布时间】:2021-07-13 02:22:01
【问题描述】:

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

<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 的语言

【问题讨论】:

  • 您正在尝试使用 MSHTA 无法理解的 HTML5 功能,因为它基于 IE9 引擎,按照当今的标准,这在很大程度上不是标准浏览器引擎。

标签: html vbscript hta


【解决方案1】:

输入类型 number 在任何版本的 MSHTML 中都不受适当支持,因此需要另一种方法。

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

另一种解决方案是使用脚本过滤输入,如下面的示例所示。

示例1(使用IE 7文档模式):

此版本过滤非数字字符在显示之后,因此非数字字符“闪烁”。

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="x-ua-compatible" content="ie=7">
<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 = ""
    FocusHelper.Focus
  End If
End Sub

</script>
<style>
#FocusHelper {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>

示例2(使用IE 9文档模式):

这个更好的版本使用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 = ""
    FocusHelper.Focus
  End If
End Sub

Sub ReFocus
  ActionNo.Focus
End Sub

</script>
<style>
#FocusHelper {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>

【讨论】:

  • 这里有一些错误信息,但有效的尝试。 IE9兼容模式兼容HTA:APPLICATION这就是重点,MSHTA.exe引擎完全建立在IE9引擎之上。
  • 感谢指正。我忘记了不支持HTA:APPLICATION的是ie=10及以上。答案已修改。
【解决方案2】:

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

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

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


【讨论】:

  • 感谢您的解释。非常感激。我最终编写了一个验证例程来处理这个问题。唯一有效的属性是 maxlength,即使 size 属性似乎也不起作用,因为您无法将输入字段减小到该大小..但这并不是真正的问题。我知道必须找到一种方法来表明该字段是错误的,而不是弹出一个...有没有办法防止一个错误字段跳出?也就是说保持焦点在输入框内有错误??
  • input 标记中使用onkeypress="functionhere" 之类的事件处理程序,然后将VBScript functionhere 写入handle the keypress event
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-19
  • 2021-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多