2013-10-01 88 views
27

我正在jquery中學習事件。在實施它們時我遇到了疑問。 mousedown()和click()事件有什麼區別。我應該在什麼條件下使用哪個事件?mousedown和點擊jquery之間的區別

例如: 這兩個事件下面的代碼執行同樣的任務:

$("#p1").mousedown(function(){ 
    alert("Mouse down over p1!"); 
}); 


$("#p1").click(function(){ 
    alert("Mouse down over p1!"); 
}); 

兩個執行same.Can有人澄清的差異。如果相同,我應該選擇哪個?

+2

考慮'拖動'的情況,你會得到你的答案。 –

+0

同意Gupta。例如:放置2個按鈕1在Click上有警報,2在mousedown上有警報。將鼠標放在每個上並拖動光標並放開。鼠標按下 - 將觸發,點擊 - 不會 – Cheese

回答

34

onMouseDown將觸發。同樣,當任何按鈕被釋放時,onMouseUp將會觸發。 onMouseDown即使在對象上單擊鼠標時也會觸發,但如果在其他位置單擊並按住該按鈕,則會觸發onMouseUp,然後將其釋放到對象上方。當按下和在同一對象上釋放鼠標左鍵

onClick纔會觸發。如果您關心的是訂單,如果同一個對象設置了所有3個事件,則爲onMouseDown,onMouseUp,然後onClick。每個甚至應該只觸發一次。

詳情:

http://api.jquery.com/click/
http://api.jquery.com/mouseup/
http://api.jquery.com/mousedown/

SourceAnton Baksheiev

+3

這些URL是指jQuery,而'onClick','onMouseUp'和'OnMouseDown'實際上不是jQuery事件,而是JavaScript事件。我認爲最好鏈接到[在這種情況下的w3c規範。](http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-eventgroupings-mouseevents)(向下滾動有點在鏈接的頁面上) –

+0

但是,如果我們在同一個元素上綁定click和mousedown事件。 mousedown事件總是觸發而不是點擊。爲什麼會這樣發生。如果我們同時需要鼠標和點擊,我們該怎麼做。 看到這個jsfiddle http://jsfiddle.net/a74k92dd/ – Arvin

+0

http://jsfiddle.net/wBfbm/37/測試 – hlcs

11

當按下鼠標按鍵mousedown事件被觸發,但它發佈之前。

click事件在mousedownmouseup事件之後被觸發。當按下左或右(或中間)

+0

如果在同一個elemtn上發生mousedown和mouseup事件,您還應該提及'click'事件觸發。 –

1

$(element).click()火災,當你鼠標按鈕,然後鬆開它。

$(element).mousedown()火災,然後按下鼠標按鈕。

抱着嘗試過該按鈕被點擊的按鈕,然後在這裏釋放:http://jsfiddle.net/n9rJ9/

0

有許多的鼠標按下,mouseup和鼠標點擊,再加上其他一些鼠標點擊相關的事件。

只要鼠標在進程中沒有移動,mouseClick事件通常在mouseDown後面緊跟着一個mouseUp。

1

他們沒有。您可能會這樣認爲,因爲您將兩個事件處理程序綁定在同一個元素上,所以在發生點擊事件之前,mousedown將始終啓動。

如果你將它們綁定到不同的元素上,你將會看到mousdown總是會在沒有釋放的情況下按下按鈕(任何鼠標按鈕)而觸發,點擊後會釋放鼠標左鍵(主) 。

看到這個小的jsfiddle:當按下左或右(或中間)http://jsfiddle.net/wBfbm/

$("#p1").mousedown(function(){ 
    alert("Mouse down over p1!"); 
}); 


$("#p2").click(function(){ 
    alert("Mouse down over p1!"); 
}); 
1

onMouseDown將觸發。當按下和在同一對象上釋放鼠標左鍵

onClick纔會觸發。

1

試試這種方法。因爲event.stopPropagation不會停止鼠標向下的單擊事件事件。鼠標向下和點擊事件不相互關聯。

var mousedDownFired = false; 

    $("#id").mousedown(function(event){ 
     mousedDownFired =true; 
     //code 
    }); 

    $("#id").click(function(event){ 
    if(mousedDownFired) 
     { 
     mousedDownFired = false; 
     return; 
     } 
     //code 
}); 

更新時間:

NO。鼠標事件被觸發像這樣

1)的MouseDown

2)點擊

3)的MouseUp

如果按下鼠標觸發,然後標誌將後鼠標按下事件單擊啓用將觸發。在這個點擊事件將會禁用標誌變量。這將以循環方式工作。不會考慮兩個鼠標向下或兩個點擊

+2

那麼這只是明顯錯誤的。你需要更新這個帖子,以便它有正確的信息。您可以清楚地看到這個codepen的順序是mousedown,mouseup,請點擊:https://codepen.io/mudassir0909/pen/eIHqB – kamelkev

+0

順序可能因使用的瀏覽器而異。我沒有在瀏覽器上測試過它。但是,在我對Chrome中處理的事件的觀察中,按照mousedown,mouseup的順序觸發事件,然後單擊。 – BrightIntelDusk

+0

所有瀏覽器按順序觸發:mousedown,mouseup,click,不是此答案中所述的順序。 – JonBrave

相關問題