gpt4 book ai didi

javascript - AngularJS:用户使用确认对话框取消后,无法忽略输入字段上的更改事件

转载 作者:行者123 更新时间:2023-11-30 17:28:10 26 4
gpt4 key购买 nike

我正在尝试创建一个指令,每当输入字段(在本例中为 radio )上的值发生更改时,该指令都会向用户显示一条确认消息。

因此,如果选择“正常”,用户点击“跟踪”,然后取消确认框,我希望我的模型和 View 都设置回“正常”。

我的输入是这样的:

<form name="form1">
<input type="radio" id="blah" name="blah" ng-model="emailType" value="normal" ng-confirm-click="Are you sure you want to do that?">
<input type="radio" id="blah2" name="blah2" ng-model="emailType" value="tracked" ng-confirm-click="Really?">
</form>

使用 ng-change 对我来说真的不起作用,因为如果我在确认时说不,那就太晚了:值已经被改变了。

我试图遵循这个 link .我的指令现在看起来像这样:

我的指令是这样的:

app.register.directive('ngConfirmClick', [ function () {

return {
priority: -1,
restrict: 'A',
require: 'ngModel',
link: function (scope, element, attrs, modelCtrl) {
var message = attrs.ngConfirmClick;

modelCtrl.$parsers.push(function (inputValue) {
var modelValue = modelCtrl.$modelValue;

if (inputValue !== modelValue && message && !confirm(message)) {
modelCtrl.$viewValue = modelValue;
modelCtrl.$render();
}

return modelCtrl.$viewValue;
});
}
}
}]);

});

解析器在模型更改之前触发,我可以确认/取消我的确认框,我可以更改值。但是当函数返回时,我的模型最终还是用新值更新了。

根据我在网上看到的一个例子,我也尝试了 $rollbackViewValue(),但它不起作用(函数未定义)。

我确定我错过了一些非常重要的步骤。谁能伸出援手?

最佳答案

找到您的问题。

modelCtrl.$viewValue = modelValue; 更改为 modelCtrl.$setViewValue(modelValue);

jsfiddle

关于javascript - AngularJS:用户使用确认对话框取消后,无法忽略输入字段上的更改事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23813262/

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