javascript - 需要 TextBox 的 Angular 的奇怪行为

标签 javascript jquery angularjs

我有 2 个文本框,一个是必需的,另一个不是必需的。

如果我们在所需的文本框中添加文本,例如“ABC”,然后删除内容,ng-model 将设置为 undefined

如果我们向非必填字段添加文本并删除内容,ng-model 不会为空字符串 ""

这是关于我在上面解释的行为的一个小插曲。请使用控制台查看结果。

http://plnkr.co/edit/XgQBfcyRF3OwG1qC0gXb?p=preview

为什么两者在ng-model设置上有区别?

最佳答案

似乎是设计使然,并且与经过验证的表单值的一致行为有关。

文档中没有关于此行为的任何内容,AFAIK.. 这里暗示 -> https://github.com/angular/angular.js/blob/master/src/ng/directive/input.js#L1045

使用 angularJS 验证,如果允许在字段中输入值,则该值将成为模型的值(与任何其他绑定(bind)值的行为一样)。如果不是,保持一致的唯一方法是将该值设置为未定义(因为该字段中没有允许的值)。另外两个选项是保留它的最后一个有效值,或者继续绑定(bind)错误的值,只触发无效字段和表单的标志。这两种解决方案都很糟糕 - 可能不需要保留最后一个值(如果您要使用这些值而不考虑表单的状态,则会导致错误)并且允许无效值是一个可怕的罪过;)(你不能'不要相信验证服务有助于防止使用错误类型的错误)

虽然它看起来很奇怪甚至不一致,但事实并非如此。我稍微修改了您的 plunkr 以验证一个数字,我相信这可以更清楚地说明为什么会这样:http://plnkr.co/edit/9gJmblUn9MUUeFt5lWJZ?p=preview .

因此,实际上没有区别 - 只有在您的第二个输入中,空字符串才被认为是有效的,因此是该字段可接受的值。

关于javascript - 需要 TextBox 的 Angular 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17608469/

相关文章:

javascript - 使用 jQuery 模拟按键

javascript - jQuery 帖子在 Chrome 中有效,但在 IE 或 FF 中无效

angularjs - 更改数据时光标移至输入末尾

angularjs - Angular 嵌套组件父级未定义

angularjs - 使用 Intellij 编辑 .js 文件会导致 Jshint 错误

javascript - 在 parent 之前 react child Prop 渲染?

javascript - 在 AngularJS 中使用选择输入选择不同的子 JSON 元素

javascript - Jquery 使用数据对象查找具有 HTML5 数据属性的元素

javascript - jQuery 微醉 : manual triggers and delayIn

jquery - jquery 行为不一致