Pet*_*ete 5 javascript html5 google-chrome angularjs
我有一个数字字段,专门说" 输入一个数字 ".最终用户总是会输入一个字符串.当用户使用Google Chrome点击"重置"按钮时,包含文字的数字字段将不会重置.
要求是:
type="number"属性,因为它允许键盘在移动设备上弹出.有一个jsFiddle演示版.
<div ng-app="app" ng-controller="ctrl">
<p>
Enter a string into the "number" field. Clicking any of the buttons
will not clear the field.
</p>
<p>
Enter a number into the "number" field. Clicking any of the buttons
will clear the field.
</p>
<input type="number" ng-model="someValue" placeholder="Enter a number"/>
<button type="button" ng-click="set('hello, world!')">Set to Hello, World!</button>
<button type="button" ng-click="set(undefined)">Set to undefined</button>
<button type="button" ng-click="set('')">Set to empty string</button>
<button type="button" ng-click="set(0)">Set to zero</button>
</div>
Run Code Online (Sandbox Code Playgroud)
angular.module('app', [])
.controller('ctrl', function($scope) {
$scope.someValue = undefined;
$scope.set = function(val) {
$scope.someValue = val;
};
});
Run Code Online (Sandbox Code Playgroud)
似乎可以使用指令来解决这个问题,但我希望有一个侵入性较小的解决方案,因为该指令将触发任何输入。但是,它执行了所需的操作。看来,在数字字段中输入字符串会破坏 Google Chrome 和 Angular 的功能。
.directive('input', function () {
return {
restrict: 'E',
require: 'ngModel',
link: function (scope, elem, attrs, ctrl) {
if (attrs.type.toLowerCase() !== 'number') {
return;
} //only augment number input!
ctrl.$formatters.push(function (value) {
return value ? parseFloat(value) : null;
});
}
};
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2445 次 |
| 最近记录: |