如何将表单中的文本框显式设置为脏?

时间:2015-05-05 07:05:20

标签: javascript angularjs

我已经看过How to set a particular field in a form to dirty in angularjs 1.3Angular.js programmatically setting a form field to dirty等问题,但它们无效。

我将angularjs中的文本框自动填充为:

$scope.address.city = "Santa Clara";

$scope.address.city.$dirty = true;

在html中我有ng-model="address.city" ng-model-options="{ updateOn: 'change blur' }"

但是,$scope.address.city.$dirty = true;在控制台中提供了 undefined

我用过

$http.get("somewebsite.com").success(function(data){ $timeout(function () { $scope.address.city.$dirty = true; }, 0); console.log('$scope.address.city.$dirty',$scope.address.city.$dirty);})

但我仍然收到错误TypeError: Cannot set property '$dirty' of undefined

我使用的是角1.3.1。

2 个答案:

答案 0 :(得分:1)

在Html中,

<form name="formName">
    <input type="text" name="city" ng-model="address.city" 
    ng-model-options="{ updateOn: 'change blur' }" />
</form>

在控制器中,

$timeout(function () {
    $scope.formName.city.$dirty = true;
}, 0);

请注意,name属性不是模型名称。

这是DEMO

答案 1 :(得分:0)

您必须在nameform上错过field属性。您的表单名称应为address&amp;字段名称应为city,然后只能访问控制器范围或UI

中的$scope.address.city.$dirty

<强>标记

<form name="address">
    <input type="text" name="city" ng-model="address.city" 
    ng-model-options="{ updateOn: 'change blur' }" />
</form>

它可以在html上用作address.city.$dirty&amp;在控制器内部,它将是$scope.address.city.$dirty

<强>更新

在您的情况下,表单名称address范围与您的address冲突,您将覆盖已包含表单对象的address范围变量。因此,在覆盖它之后,所有表单属性都会被删除。看到我的plunkr,我在那里重现了你正在做的事情。

Plunkr with Issue

<form name="form">
    <input type="text" name="city" ng-model="address.city" 
    ng-model-options="{ updateOn: 'change blur' }" />
</form>

<强>控制器

$timeout(function () {
    $scope.form.city.$dirty = true;
}, 0);

Fixed plunkr