javascript - AngularJS 输入类型数字在输入字母时不会更新模型

标签 javascript angularjs 2-way-object-databinding

显然,某些浏览器允许用户在数字输入字段中输入字母(例如,Mac 上的 Chrome 46.0.2490.80 或 Ubuntu 上的 Chrome 41.0.2272.89)。此外,所有浏览器都接受字符“e”,因为在某些特定条件下它可以被视为有效数字。

现在,如果用户在该字段中输入任何字母,显然 Angular 无法更新模型。

你可以在这个 fiddle 中看到: http://jsfiddle.net/Y8Jg6/78/

<h1>Simple Data Binding with AngularJS</h1>
<br />
<div ng-app>
Name: <input type="number" ng-model="name" />
<br /><br />
   Welcome to AngularJS {{name}}
</div>

这是预期的行为吗?通过这种方式,有时模型不会反射(reflect)输入字段的值,这可能会导致意外错误(例如,我正在考虑字段验证)

最佳答案

如果您需要一个数字,那么该字段中的任何字母都会使模型值无效(当然,除非您提到的是“e”)。 Angular 1.4.x 使用此正则表达式来确定该数字是否允许:

var NUMBER_REGEXP = /^\s*(\-|\+)?(\d+|(\d*(\.\d*)))([eE][+-]?\d+)?\s*$/;

如您所见,“e”或“E”在这种情况下有效(但其他字母无效)。您的 jsfiddle 使用旧版本的 Angular,其中“e”字符似乎未正确解析,因此使模型无效。这里是一样的jsfiddle使用 Angular 1.4.7 正确解析数字(包含 e 或 E 的数字)。

您的应用可能会使用验证来确定模型是否已填充(如果它实际上是必填字段)。如果您确实想在模型中允许非数字,请考虑输入不同的“类型”。

关于javascript - AngularJS 输入类型数字在输入字母时不会更新模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33523277/

相关文章:

javascript - 窗口性能不起作用

javascript - 使用函数的 ngShow/ngHide

angularjs - 使用 Angular Controller 中的预定义值设置 ons-switch

javascript - 双向绑定(bind)不适用于 ng-repeat

java - 为什么这个数学函数在 Java 和 JavaScript 中返回不同的值?

单击按钮时 Javascript 选项卡重新加载

javascript - NPM 每周下载量为零

angularjs - Angular 指令使用 Typescript 接收对象作为属性

javascript - 如何使用 ng-options 在 angularjs 中自动选择另一个选项