同様の問題がありましたが、ボタンを無効にしてもうまくいきませんでした。ボタンがクリックされたときに発生した他のアクションがいくつかあり、ボタンがすぐに無効にならなかったり、ユーザーがダブルクリックしたときに 2 つのイベントが発生したりしました。
Pangui のタイムアウトのアイデアを採用し、両方の手法を組み合わせて、ボタンを無効にし、念のためタイムアウトを含めました。そして、単純な jQuery プラグインを作成しました。
var SINGLECLICK_CLICKED = 'singleClickClicked';
$.fn.singleClick = function () {
var fncHandler;
var eventData;
var fncSingleClick = function (ev) {
var $this = $(this);
if (($this.data(SINGLECLICK_CLICKED)) || ($this.prop('disabled'))) {
ev.preventDefault();
ev.stopPropagation();
}
else {
$this.data(SINGLECLICK_CLICKED, true);
window.setTimeout(function () {
$this.removeData(SINGLECLICK_CLICKED);
}, 1500);
if ($.isFunction(fncHandler)) {
fncHandler.apply(this, arguments);
}
}
}
switch (arguments.length) {
case 0:
return this.click();
case 1:
fncHandler = arguments[0];
this.click(fncSingleClick);
break;
case 2:
eventData = arguments[0];
fncHandler = arguments[1];
this.click(eventData, fncSingleClick);
break;
}
return this;
}
そして、次のように使用します。
$("#button1").singleClick(function () {
$(this).prop('disabled', true);
//...
$(this).prop('disabled', false);
})