Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 可以在元素而不是窗体上重置$pristine吗_Javascript_Angularjs - Fatal编程技术网

Javascript 可以在元素而不是窗体上重置$pristine吗

Javascript 可以在元素而不是窗体上重置$pristine吗,javascript,angularjs,Javascript,Angularjs,我有一个表格,它有一个网格(表行),每一行都有一个复选框,允许您选择该行进行操作(删除等)。还有一个全选复选框,允许您选择所有行。当我点击任何复选框选择一行时,表单不再是$pristine。对于我的用例,我不希望表单仅仅因为用户选中了复选框就被触摸或不原始。我知道我可以重置整个表单,但我需要的是仅在控件(元素)上设置$pristine。我确实尝试在$timeout中设置$pristine,但似乎没有效果 $timeout(function () {

我有一个表格,它有一个网格(表行),每一行都有一个
复选框
,允许您选择该行进行操作(删除等)。还有一个全选
复选框
,允许您选择所有行。当我点击任何
复选框选择一行时,表单不再是
$pristine
。对于我的用例,我不希望表单仅仅因为用户选中了复选框就被触摸或不原始。我知道我可以重置整个表单,但我需要的是仅在控件(元素)上设置
$pristine
。我确实尝试在
$timeout
中设置
$pristine
,但似乎没有效果

            $timeout(function () {

                // this did not work either
                scope.myForm.myelementName.$pristine = true;
                // this did not work either
                scope.myForm.myelementName.$setPristine();
            });

您可以在复选框上使用$setPristine(),但如果窗体上的所有其他控件都是pristine,则不会将窗体重置为pristine。我发现了一个解决方法:当你点击复选框时,我将其设置回原始状态,然后当我取消表单时,我检查表单上是否有任何其他控件不是原始状态。我希望一旦我将复选框设置回原始状态,就可以调用某种方法来检查表单控件是否原始。基本上我自己编写了这个方法,它手动将表单设置回原始状态。不喜欢这样做我可能应该补充说,用户有能力编辑网格上的其他控件。因此,他们可能选中了“选择项”以删除一行,然后决定不删除,他们点击“取消”,他们会收到一条警告:“嘿,您更改了某些内容,您确定要取消吗?”当仅通过复选框选择项时,并没有真正更改任何数据。这是我第一次尝试,我将对其进行优化并对其进行单元测试。如果你看到我能做得更好,就告诉我。我很谦虚!
function setFormPristine(form) {

            var isPristine = true;
            angular.forEach(form, function (value, key) {

                if ((typeof (value) != "undefined") && value.hasOwnProperty('$pristine') && !value.$pristine) {

                    isPristine = false;
                    return;
                }
            });

            if (isPristine) {
                form.$setPristine();
            }
}