如何防止用户双击按钮打开两个相同的 Bootstrap 对话框?
How to prevent two identical Boostrap dialog from opening by user double clicking the button?
如果 ajax 需要一段时间来加载对话框并且用户双击按钮,屏幕上会弹出两个相同的对话框。我想阻止它发生。
$("#ShowUpCallTag").on('click', function (e) {
$.ajax({
url: '/Ship/CallTags/Dialog/' + $(e.target).data('calltagid'),
type: 'get',
datatype: 'json'
}).done(function (data) {
var dialog = main.ship.calltags.dialog.buildDialog(data);
dialog.open();
});
});
我认为您代码中的问题在于您不知道对话框是否打开。我会做什么:
- 在与您的 jQuery 调用相同的范围内创建一个变量,例如:
var dialogOpened = false
- 在您的点击处理函数中,仅当
dialogOpened === false
时才执行 ajax 调用
- 在您的
done(function (data) {})
回调中,将 dialogOpened
设置为 true 并侦听 Bootstrap 生成的事件以了解模式何时被用户关闭(参见 Bootstrap Modal Events)
- 当模式关闭时,设置回
dialogOpened
为false。
- 我认为也是一个好的做法:如果您绑定点击的元素是一个按钮,您可以在用户点击它后立即禁用它。
var isModelDialogOpen = false;
$("#ShowUpCallTag").on('click', function (e) {
if (isModelDialogOpen == false) {
isModelDialogOpen = true;
//Popup call tag dialog.
$.ajax({
url: '/Ship/CallTags/Dialog/' + $(e.target).data('calltagid'),
type: 'get',
datatype: 'json'
.done(function (data) {
var dialog = main.ship.calltags.dialog.buildDialog(data);
dialog.open();
})
.always(function (data) {
isModelDialogOpen = false;
});
}
});
如果 ajax 需要一段时间来加载对话框并且用户双击按钮,屏幕上会弹出两个相同的对话框。我想阻止它发生。
$("#ShowUpCallTag").on('click', function (e) {
$.ajax({
url: '/Ship/CallTags/Dialog/' + $(e.target).data('calltagid'),
type: 'get',
datatype: 'json'
}).done(function (data) {
var dialog = main.ship.calltags.dialog.buildDialog(data);
dialog.open();
});
});
我认为您代码中的问题在于您不知道对话框是否打开。我会做什么:
- 在与您的 jQuery 调用相同的范围内创建一个变量,例如:
var dialogOpened = false
- 在您的点击处理函数中,仅当
dialogOpened === false
时才执行 ajax 调用
- 在您的
done(function (data) {})
回调中,将dialogOpened
设置为 true 并侦听 Bootstrap 生成的事件以了解模式何时被用户关闭(参见 Bootstrap Modal Events) - 当模式关闭时,设置回
dialogOpened
为false。 - 我认为也是一个好的做法:如果您绑定点击的元素是一个按钮,您可以在用户点击它后立即禁用它。
var isModelDialogOpen = false;
$("#ShowUpCallTag").on('click', function (e) {
if (isModelDialogOpen == false) {
isModelDialogOpen = true;
//Popup call tag dialog.
$.ajax({
url: '/Ship/CallTags/Dialog/' + $(e.target).data('calltagid'),
type: 'get',
datatype: 'json'
.done(function (data) {
var dialog = main.ship.calltags.dialog.buildDialog(data);
dialog.open();
})
.always(function (data) {
isModelDialogOpen = false;
});
}
});