2016-02-12 94 views
3

我有一些jQuery與很多不同的點擊事件。我的一些用戶是習慣性的雙重答題器,因爲我沒有雙擊事件綁定,所以會觸發單擊事件兩次;這可能是一個痛苦 - 例如,如果一次點擊打開某個東西,另一次關閉它,雙擊是一個零和遊戲。有沒有辦法在jQuery/JavaScript中將所有雙擊事件綁定到它們的單擊等效項?

有沒有什麼辦法可以將所有雙擊事件綁定到他們的單擊等價物,而不需要單獨的代碼?

+0

你說我現在刪除答案('$(document).on(「dblclick」,false);')儘管我意識到(並確認了jcubic),但它確實是錯誤的。你說*「也許它的工作是因爲我綁定了我的事件?$(document).on(」click「,」.likePost「,function(event){」*但是[仍然不適用於我](https://jsfiddle.net/3yh9up53/1/),我認爲它一定是觀察錯誤 –

+1

@TJCrowder - 是的,你是對的(因爲你錯了)。它似乎工作,如果我快速雙擊點擊 - 一個稍慢的dbl點擊(但仍然足夠快,以註冊爲dblclick)呈現相同的問題。我想知道是否所有點擊事件超時可以做這項工作嗎? – BFWebAdmin

+0

(第一次點擊改變了改變事件的類別,如果我快點擊雙擊,我仍然擊中第一個事件) – BFWebAdmin

回答

1

我不認爲將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>

-1

這是我會做:

<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) 
} 
0

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(你可以設置時間根據自己的需要) 檢查控制檯來查看結果

相關問題