2012-11-14 69 views
1

前提條件: 開發一個圖形散點圖(用flotchart.org)我有一個js函數,動態創建一個顯示圖像(按鈕)以實現用戶操作點擊按鈕(此處的示例代碼爲「pan Left」下面)jquery:如何禁用dblclick事件?

問題: 當用戶點擊快速按鈕時,會觸發(不需要的)雙擊事件。 當鼠標懸停在按鈕上時,如何禁用雙擊(因此只允許單擊事件)?換句話說:在下面的代碼中使用unbind或dblclick會出什麼問題?

function addButtonPanLeft(x, top, offset) { 
    $('<img id="buttonPanLeft" class="navigationbutton" src="../images/pan-left.png" style="left:' + x + 'px;top:' + top + 'px"' + ' title="Pan Left">').appendTo(placeholder).click(function(e) { 
     e.preventDefault(); 
     panleft(); 
    }); 

    // disabilito double click sul bottone 
    $('#buttonPanLeft').unbind('dblclick'); 
} 


function addButtonPanRight(x, top, offset) { 
    $('<img id="buttonPanRight" class="navigationbutton" src="../images/pan-right.png" style="left:' + x + 'px;top:' + top + 'px"' + ' title="Pan Right">').appendTo(placeholder).click(function(e) { 
     e.preventDefault(); 
     panright(); 
    }); 

    // disabilito double click sul bottone NON FUNZIONA ?????? 
    $('#buttonPanRight').dblclick(function(e) { 
     e.preventDefault(); 
     panright(); 
     log({ 
      text: "double click", 
      type: 'debug' 
     }); 
    }); 
} 

千恩萬謝 喬治

回答

3

編輯:由於@Accountant م在評論中提到,unbind現在已經過時。改爲使用類似的off

unbind刪除所有事件處理程序,它不會阻止該事件被觸發。你需要做的是附加的事件處理程序停止事件的傳播:

$('#buttonPanLeft').unbind('dblclick'); 
$('#buttonPanLeft').dblclick(function(e){ 
    e.stopPropagation(); 
    e.preventDefault(); 
    return false; 
}); 

編輯:我可能誤解了你的問題。在要防止雙擊的第二次點擊來自燒成click處理的情況下,你可以做這樣的事情:

function handler(e){ 
    e.preventDefault(); 
    panleft(); 
    $(this).unbind('click'); 
    setTimeout(function(){$('#buttonPanLeft').click(handler)}, 500) 
} 
$('#buttonPanLeft').click(handler); 

防止再點擊一下事件的發生,直到500毫秒已過去。

DEMO

+0

是不是處理了'e.preventDefault();'在例子中,我提出?謝謝 –

+0

@Solyaris您將處理程序附加到'click',而不是'dblclick'。 –

+0

太棒了!終於用'stopPropagation();解決了!非常感謝 ! –

相關問題