2012-12-24 261 views
0

我是新來的jquery,我想知道是否有可能改變所有點擊事件(特定div內的元素)雙擊使用jQuery的事件?提前謝謝了。將一個事件偵聽器更改爲另一個事件偵聽器?

function isTouchDevice(){ 
    return (typeof(window.ontouchstart) != 'undefined') ? true : false; 
} 
if(isTouchDevice()===true){ 
    //change click events to doubleclick events 
} 
+3

'(typeof運算(window.ontouchstart)= '未定義'!)? true:false;'是多餘的。使用'(typeof(window.ontouchstart)!=='undefined')' – Joe

回答

4

關注此法寶:

$('*').each(function(){ 
    var click = $(this).data('events').click; 
    if(click[0]) { //check if there is a click handler attached 
     $(this).on('dblclick', click[0].handler).off('click'); 
    } 
}); 

以上將通過元素在頁面上,將它的點擊處理程序,其DBLCLICK處理程序。使用*通常不建議。我會嘗試只選擇所有具有點擊選擇器的elemts,並通過它們。

+0

感謝您的回覆!是否有可能用click事件替換懸停事件?或者這是否自動完成此? – AnchovyLegend

+0

@MHZ只需按照我在代碼中的內容進行操作......但實際上我會做的是,當您附加**事件時,我將決定是否使用click或dblclick而不是使用我的hacky way ... – Neal

+0

如果(懸停[0]){$(this).on('click',hover [0] .handler).off('hover')}會加工處理懸停?我欣賞幫助:) – AnchovyLegend

0

當然是...

function yourClickHandler(event) { 
    // here you can check for click or dblclick as so... 
    if (event.type == 'dblclick') { /* handle dblclick specific stuff */ } 
    else if (event.type == 'click') { /* handle normal click specific stuff */ } 
} 

$(document).ready(function() { 
    if (isTouchDevice()) { 
     $('div#SPECIFIC_DIV *').on('dblclick', yourClickHandler); 
    } 
    else { 
     $('div#SPECIFIC_DIV *').on('click', yourClickHandler); 
    } 
}); 
+0

是的,但現在點擊和dbl點擊都會做同樣的事情。 – Neal

+0

那麼爲什麼即使有'點擊'事件?只需添加你的'dblclick'事件處理程序並完成它。 – Derek

+0

@Derek,我試圖做的是,一旦檢測到支持觸摸的設備,將鼠標懸停在水龍頭上,然後單擊w/doubletap。 – AnchovyLegend

-1

試試這個:

$('#target').click(function() { 
    if(isTouchDevice == true) { 
     $('#target').dblclick(); 
    } 
}); 
+0

是的,但現在點擊和dbl點擊都會做同樣的事情。 – Neal

+0

其實是的,但在觸控設備中,需要雙擊行爲來點擊按鈕。 – ATOzTOA