我有一些jQuery與很多不同的點擊事件。我的一些用戶是習慣性的雙重答題器,因爲我沒有雙擊事件綁定,所以會觸發單擊事件兩次;這可能是一個痛苦 - 例如,如果一次點擊打開某個東西,另一次關閉它,雙擊是一個零和遊戲。有沒有辦法在jQuery/JavaScript中將所有雙擊事件綁定到它們的單擊等效項?
有沒有什麼辦法可以將所有雙擊事件綁定到他們的單擊等價物,而不需要單獨的代碼?
我有一些jQuery與很多不同的點擊事件。我的一些用戶是習慣性的雙重答題器,因爲我沒有雙擊事件綁定,所以會觸發單擊事件兩次;這可能是一個痛苦 - 例如,如果一次點擊打開某個東西,另一次關閉它,雙擊是一個零和遊戲。有沒有辦法在jQuery/JavaScript中將所有雙擊事件綁定到它們的單擊等效項?
有沒有什麼辦法可以將所有雙擊事件綁定到他們的單擊等價物,而不需要單獨的代碼?
我不認爲將dblclick映射到點擊會有幫助;如果有的話,我認爲這會讓事情變得更糟。
你說過你使用委託來連接你的事件。你可以給自己,去抖調用事件處理函數:
// Very simple debounce, accepts first event and disregards
// subsequent ones for a period of time
function debouncedHandler(handler, delay) {
delay = delay || 300; // milliseconds, I'm told Windows uses 500 but that seems awfully long
var last;
return function() {
var now = Date.now();
if (last && last + delay > now) {
return false;
}
last = now;
return handler.apply(this, arguments);
};
}
$(document).on("click", "input[type=button]", debouncedHandler(function() {
$(".container").toggleClass("toggle-open toggle-closed");
}));
.toggle-open .closed {
display: none;
}
.toggle-closed .open {
display: none;
}
<input type="button" value="Open/Close">
<div class="container toggle-open">
<span class="open">OPEN</span>
<span class="closed">closed</span>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
這是我會做:
<input type="hidden" id='counter' value='0'>
<input type="button" value="Save" onclick="save()">
function save(){
var counter = parseInt(document.getElementById("counter").value);
counter = counter+1;
if(counter == 1){
console.log('Saving...')
}
document.getElementById("counter").value = counter;
//after 3 seconds set counter back to 0
setTimeout(function(){
document.getElementById("counter").value = 0;
}, 3000)
}
HTML
<button class="btn">
click me
</button>
JQUERY
$(document).ready(function(){
var clickDisabled = false;
$('.btn').click(function(){
if (clickDisabled)
return;
// do your real click processing here
console.log('hi');
clickDisabled = true;
setTimeout(function(){clickDisabled = false;}, 5000);
});
});
查收https://jsfiddle.net/05tvvaeq/
防止點擊處理程序5secs(你可以設置時間根據自己的需要) 檢查控制檯來查看結果
你說我現在刪除答案('$(document).on(「dblclick」,false);')儘管我意識到(並確認了jcubic),但它確實是錯誤的。你說*「也許它的工作是因爲我綁定了我的事件?$(document).on(」click「,」.likePost「,function(event){」*但是[仍然不適用於我](https://jsfiddle.net/3yh9up53/1/),我認爲它一定是觀察錯誤 –
@TJCrowder - 是的,你是對的(因爲你錯了)。它似乎工作,如果我快速雙擊點擊 - 一個稍慢的dbl點擊(但仍然足夠快,以註冊爲dblclick)呈現相同的問題。我想知道是否所有點擊事件超時可以做這項工作嗎? – BFWebAdmin
(第一次點擊改變了改變事件的類別,如果我快點擊雙擊,我仍然擊中第一個事件) – BFWebAdmin