如何在调用回调之前禁用按钮

How do I disable a button until callback is called?

本文关键字:按钮 回调 调用      更新时间:2023-09-26

我有一个带有按钮的联系人表单,如果该表单无效或未选择重述,我想禁用该按钮。

<form name="contactForm" data-ng-controller="ContactCtrl" novalidate>
...
<input class="form-control" name="email" type="email" required data-ng-model="contactEmail">
...
<div class="g-recaptcha" data-callback="recaptchaCalled" data-expired-callback="recaptchaExpired" data-sitekey="PULBIC KEY"></div>
...
<input type="checkbox" data-ng-model="recaptchaValid" />
...
<button type="submit" ng-disabled="!recaptchaValid || !contactForm.$valid">Send</button>

这是表单的控制器,现在调用此回调是因为发生了警报。

app.controller('ContactCtrl', function($scope) {
    $scope.recaptchaValid = false;
    recaptchaCalled = function() {
        $scope.recaptchaValid = true;
        alert('pressed!');
    };
});

如果我输入了一个有效的电子邮件地址,该按钮将保持禁用状态(并取消选中复选框),然后我可以单击该复选框,该按钮会再次启用、取消选中和禁用。-正确的行为。

如果我输入了一个有效的电子邮件地址,然后进行captcha,该按钮将保持禁用状态(并取消选中复选框)。

如果我做了captcha,然后输入了一封有效的电子邮件,按钮就会启用(复选框也会被选中)。

如果我输入了一个有效的电子邮件地址,然后进行验证,然后返回并触摸表单并强制其重新验证,按钮(和复选框)就会正确地执行它们的操作。

这似乎表明需要调用刷新。我不能把这个放在jsfiddle上,因为我不能进行棱角分明的工作。

我确实发现了这个:https://github.com/VividCortex/angular-recaptcha以及如何将其集成:http://code.ciphertrick.com/2015/05/19/google-recaptcha-with-angularjs/但它太过头了,我无法计算出我需要的部分。

收到回调并在控制器中设置变量后,必须调用$apply()函数。因为回调来自Angular外部,Angular不知道它需要更新,所以你必须告诉它这样做。现在你可以在按钮上使用ngDisabled,并将其链接到控制器中的变量,你就完成了。