Javascript x秒后禁用按钮

Javascript x秒后禁用按钮,javascript,angularjs,Javascript,Angularjs,我与angularjs合作,我有一个创建票证的按钮,这个按钮与http请求一起工作,对于调用php web,问题是http请求有x秒的延迟,人们可以在这个延迟中进行如此多的点击,结果,varius tickes创建了,只有1个工作,我需要在按钮上放置一个延迟,但我无法工作,请检查此项,并注意解决方案应在请求之外Angular为此提供$timeout服务组件: $timeout(function() { $scope.betDelay=false; }, 1000); 除此之外,当您使用

我与angularjs合作,我有一个创建票证的按钮,这个按钮与http请求一起工作,对于调用php web,问题是http请求有x秒的延迟,人们可以在这个延迟中进行如此多的点击,结果,varius tickes创建了,只有1个工作,我需要在按钮上放置一个延迟,但我无法工作,请检查此项,并注意解决方案应在
请求之外

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调用,因此,解决方案是在第一次单击后禁用按钮。但我可能完全错了。我们对这个问题的理解不同。