gpt4 book ai didi

javascript - AngularJS 输入表单验证在模型更改时不会触发

转载 作者:行者123 更新时间:2023-11-29 14:55:53 25 4
gpt4 key购买 nike

我正在尝试获取一些表单输入来验证他们的模型是否/何时更新。目前删除 pristine 类的唯一方法是在输入框中手动输入。

fiddle :http://jsfiddle.net/TgR7A/在 fiddle 中,如果您单击“切换”,则 2 个输入(一个始终隐藏)通过其模型填充内容,但表单输入保持原始状态。我知道这是 AngularJS 处理表单输入的方式,但我希望有一个允许输入验证的解决方法(又名 hack!)。

HTML:

<div ng-app>
<div ng-controller="toggleCtrl">
<h1>{{ title }}</h1>

<form novalidate class="css-form" name="swtichForm">
<label>Input</label>
<input type="text" name="one" class="one" ng-show="input_show=='one'" ng-model="one" required />
<input type="text" name="two" class="two" ng-show="input_show=='two'" ng-model="two" required />
<p ng-click="toggle()">Toggle</p>
</form>
</div>

CSS:

.one {
border-color: blue;
}
.two {
border-color: yellow;
}
.css-form input.ng-invalid {
background-color: #FA787E;
}
.css-form input.ng-valid {
background-color: #78FA89;
}
.css-form input.ng-pristine {
background: #fff;
}

JS:

function toggleCtrl($scope) {
$scope.title = "Input toggle";
$scope.input_show = "one";
$scope.toggle = function () {
$scope.one = 'hello';
$scope.two = 'world';
$scope.input_show = ($scope.input_show == 'one' ? 'two' : 'one');
}
}

最佳答案

你会找到一个很好的解释here on Stack Overflow .

不幸的是,虽然有一个$setPristine()函数,但是没有$setDirty()函数。作为stevuu建议,解决问题的最简单方法是使用新值调用 $setViewValue(),然后使用 $render() 强制更新 View :

$scope.toggle = function () {        
$scope.switchForm.one.$setViewValue('hello');
$scope.switchForm.two.$setViewValue('world');

$scope.switchForm.one.$render();
$scope.switchForm.two.$render();

$scope.input_show = ($scope.input_show == 'one' ? 'two' : 'one');
}

Fiddle

关于javascript - AngularJS 输入表单验证在模型更改时不会触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17995639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com