AngularJS如何限制双击/多次点击
AngularJS How to restrict double/multiple click
我知道一个在angularJS上双击/多次的解决方案,它可以禁用按钮点击&在使用禁用的ng完成ajax处理后启用它。请建议任何其他处理angularJS双击的最佳解决方案。。。
我们的代码将在点击按钮时调用ajax方法;将需要少量的tme来处理&从数据库获取数据。我们必须限制二次/多次点击的平均时间。
我不想在ajax进行时允许点击。。。
欢迎使用简单的解决方案,而不是禁用ng,我是AngularJS 的学习者
createDialogService('js/common/templates/popup/config_reminder_popup.html',{title:isFrom,背景:真实,controller:'configReminderCController',页脚模板:"+操作+"});
$scope.saveOrUpdateReminder = function (reminder)
{
if ($scope.isDisabled)
{
return;
}
$scope.isDisabled = true;
if (!reminder.daysBeforeAfterCheckDate || reminder.daysBeforeAfterCheckDate === '')
{
alertService.openValidatPopup('Please enter days before expiration.', "Error", true, 'configRemindersCBController', 'Ok', 'u1_remove.png');
$scope.isDisabled = false;
return;
}
configRemindersService.isDaysBeforeAfterCheckDate($scope.objectId, reminder, function (result)
{
if (!reminder.selectedMessageTemplate.messageId || reminder.selectedMessageTemplate.messageId === '')
{
alertService.openValidatPopup('Please select message template.', "Error", true, 'configRemindersCBController', 'Ok', 'u1_remove.png');
$scope.isDisabled = false;
return;
}
else if (!reminder.selectedReminderSendOption.reminderSendOptionValue || reminder.selectedReminderSendOption.reminderSendOptionValue === '')
{
alertService.openValidatPopup('Please select reminder send option.', "Error", true, 'configRemindersCBController', 'Ok', 'u1_remove.png');
$scope.isDisabled = false;
return;
}
var enableReminder;
if (result.Result === 'No')
{
if (reminder.enable === true)
{
enableReminder = 'Enable';
}
else
{
enableReminder = 'Disable';
}
configRemindersService.addOrUpdateReminderConfigLine($scope.objectId, reminder, enableReminder, function (remindersResponse)
{
var reminder = remindersResponse.reminderConfigLine;
$rootScope.CONFIG = JSON.parse(remindersResponse.configData);
$scope.$modalClose();
$scope.isDisabled = false;
_.filter(configRemindersService.getMessageTemplates(), function (msg)
{
if (reminder.messageTemplateId === msg.messageId)
{
reminder.selectedMessageTemplate = msg;
}
});
_.filter(configRemindersService.getReminderSendOptions(), function (option)
{
if (reminder.reminderSendOption === option.reminderSendOptionValue)
{
reminder.selectedReminderSendOption = option;
}
});
if (configRemindersService.getIsFrom() === 'Create Reminder')
{
configRemindersService.getReminders().push(reminder);
}
else
{
configRemindersService.getReminders()[configRemindersService.getIndex()] = reminder;
}
});
}
});
};
ng-disabled绝对是正确的方法——它是在特定条件下禁用对象的现成指令。
如果你需要禁用它而不让它看起来被禁用,你有两个选项:
- 将禁用状态的css更改为启用状态
- 用一个范围变量模拟它,该变量仅在设置时执行操作
第二:
$scope.stopClick = false;
$scope.buttonClick = function () {
if ($scope.stopClick) { return; }
$scope.stopClick = true;
<.. code ..>
callback: function(data) {
$scope.stopClick = false;
}
};
这将实现目标,但它正在重新发明轮子,可能不如仅仅禁用元素并重新设计它那么健壮。
你可以这样做:
创建$scope变量
$scope.myFunnyPromise = null;
在模板中:
<button ng-if="myFunnyPromise == null"></button>
仅当myFunnyPromise等于null时显示按钮。
在你的功能中:
if($scope.myFunnyPromise !== null){
return $scope.myFunnyPromise;
}
$scope.myFunnyPromise = asyncTask().finally(function cleanUp(){
//clear the $scope variable
$scope.myFunnyPromise = null;
})
您可以在$rootScope
中拥有一个函数,该函数包含有关是否存在正在进行的http请求的信息。然后,您可以使用该值禁用不希望连续单击事件的按钮。
当有一个正在进行的http请求时,我通常使用fieldset
属性来禁用输入字段。
<fieldset ng-disabled="isWaitingForServerResponse()"> //when there is an ongoing request, input fields under this tag will be disabled </fieldset>
为了实现isWaitingForServerResponse
,我从一个繁忙的bar实现中得到了帮助,该实现显示了一个在有http请求时加载的bar。它在出现新请求时创建事件,在停止时创建另一个请求。因此,在这些事件中,我增加了一个计数器,该计数器保存活动http请求的数量,并为每个http响应递减。我以前没有使用过它,但我想您也可以使用$http.pendingRequests
属性来了解是否存在挂起的http请求。
$rootScope.numberOfResponseWaitingFromServer = 0;
$rootScope.$on("cfpLoadingBar:loading", function (event) {
$rootScope.numberOfResponseWaitingFromServer++;
});
$rootScope.$on("cfpLoadingBar:loaded", function (event) {
$rootScope.numberOfResponseWaitingFromServer--;
});
$rootScope.isWaitingForServerResponse = function () {
return $rootScope.numberOfResponseWaitingFromServer > 0;
}
- 使用类从一个标记中双击事件
- onclick函数需要双击,因为类分配延迟
- 了解双击代码标记
- jquery Onclick函数带有导致双击的回调排序函数
- 防止双击执行两次jQuery post请求
- JavaScript双击事件
- 选择“字符串”并使用SeleniumJava双击
- jQuery UI自动完成需要在iOS上双击
- 使用jquery在html中添加双击操作
- 双击泛光灯单击
- 如何在Firefox中禁用视频的单击和双击控件
- 双击可更改树标签
- svg.js/svg平移缩放-双击交互
- 在WordSmith jquery中,双击后什么决定了链接图标的位置
- 宣传单:双击时不要触发点击事件函数
- d3 中是否有点击和双击事件.js力定向图
- 当单选按钮的标签可单击时双击
- Draw2d.js:通过双击将可编辑标签添加到现有连接
- 模拟双击拖动结束 - jquery UI
- AngularJS如何限制双击/多次点击