Javascript x秒后禁用按钮
我与angularjs合作,我有一个创建票证的按钮,这个按钮与http请求一起工作,对于调用php web,问题是http请求有x秒的延迟,人们可以在这个延迟中进行如此多的点击,结果,varius tickes创建了,只有1个工作,我需要在按钮上放置一个延迟,但我无法工作,请检查此项,并注意解决方案应在Javascript x秒后禁用按钮,javascript,angularjs,Javascript,Angularjs,我与angularjs合作,我有一个创建票证的按钮,这个按钮与http请求一起工作,对于调用php web,问题是http请求有x秒的延迟,人们可以在这个延迟中进行如此多的点击,结果,varius tickes创建了,只有1个工作,我需要在按钮上放置一个延迟,但我无法工作,请检查此项,并注意解决方案应在请求之外Angular为此提供$timeout服务组件: $timeout(function() { $scope.betDelay=false; }, 1000); 除此之外,当您使用
请求之外
Angular为此提供$timeout
服务组件:
$timeout(function() {
$scope.betDelay=false;
}, 1000);
除此之外,当您使用$timeout
帮助程序时,它会自动为您执行脏模型检查(默认情况下,当您使用默认的窗口.setTimeout()
时不会发生这种情况)
基本上,Angular不会不停地检查$scope
是否已更改;它只检查组件生命周期中的关键点,$timeout可以帮助您连接到该生命周期中
请参阅更新的JSFIDLE:
或者,您也可以明确告诉
$scope
,它需要通过$apply()
执行脏检查。例如:
setTimeout(function() {
$scope.betDelay=false;
$scope.$apply();
}, 1000);
示例:我对您文章的理解是,用户可以多次点击登录按钮,生成多个重复条目(API没有时间检查现有记录,因为点击速度太快) 我们通过检查按钮是否已单击来处理此问题。创建一个名为
$scope.isButtonClicked
的变量,并将其设置为false。单击后检查是否为false。如果为false,则将其设置为true并提出请求
function LoginController($scope) {
$scope.isButtonClicked = false;
$scope.login = function () {
if($scope.isButtonClicked === false){
$scope.isButtonClicked = true
var request = $http({
dataType: 'json',
method: "post",
url: "/xxx.php",
data: {
data1: $scope.data1,
data2: $scope.data2
},
headers: { 'Content-Type': 'application/json' }
});
request.success(function (data) {
/* note i try puting a delay in the top, but idk why this cant work */
});
}
};
}
那么问题是什么?您是否希望额外的点击触发Ajax调用?为什么不在单击时禁用按钮,并在Ajax调用完成后启用它呢?“我需要在按钮中设置一个延迟,但我无法使其工作”似乎是这里的实际问题。@jmar777:我的理解是,问题是用户在登录过程中多次单击按钮并进行多个API调用,因此,解决方案是在第一次单击后禁用按钮。但我可能完全错了。我们对这个问题的理解不同。