2014-03-25 86 views
2

當我點擊時,我收到一個警告,說「down」但不是「up」。我讀過e.preventDefault()應該解決這個問題,但它沒有。有沒有人有什麼建議?在jQuery中mousedown後mouseup沒有開火

$(document).mousedown(function(e){ 
     e.preventDefault(); 
     alert("down"); 
    }); 
    $(document).mouseup(function(e){ 
     alert("up"); 
    }); 
+0

您應該嘗試使用另一種類型的元素,只是認爲事件是記錄在文檔上的,而鼠標離開元素意味着鼠標也會進入另一個元素。如果鼠標離開文檔,它發生了什麼? – user3417400

回答

3

的問題是,鼠標按下警報並從被解僱阻止鼠標鬆開。如果你只需要使用鼠標就可以正常工作,或者如果你使用除警告窗口之外的其他任何東西,這個方法就可以工作。

JSFiddle for the mouseup only

$(document).mouseup(function(e){ 
    alert("up"); 
}); 

一個第二個例子是一個輸入框:http://jsfiddle.net/YRqe8/2/

$(document).mousedown(function(e){ 
    $("#text").val("mousedown"); 
}); 
$(document).mouseup(function(e){ 
    $("#text").val("mouseup"); 
}); 
-1

嘗試把你的代碼到現成的功能是這樣的:

$(document).ready(function(){ 
    $(document).mousedown(function(e){ 
    e.preventDefault(); 
    alert("down"); 
    }); 
}); 
+0

如果jQuery未準備好綁定,則其他事件綁定也不起作用。 –

0

這是因爲從mousedown事件顯示的警報阻止了mouseup事件從射擊。

如果使用console.log,您會看到兩個事件都按預期發射。

http://jsfiddle.net/Ca9q3/

$(document).mousedown(function(){ 
    console.log('test'); 
}); 
$(document).mouseup(function(){ 
    console.log('test2'); 
}); 
0

的問題是,當向下警報發生時,該文件失去焦點,並警告框獲得焦點。所以當你放開按鈕時,它不會被文檔捕獲,因爲它發生在警告框中。

我想你會發現,如果你將alert()改爲console.log()的話,它就可以工作。

0

它並不妨礙mouseup甚至被解僱。它實際上可以像你期望的那樣在你的例子中使用alert作爲一個小小的警告。

警報對話框超出了窗口的範圍,當鼠標向上移動時,對話框處於活動狀態,事件進入警報狀態。如果您單擊並按住鼠標按鈕並使用回車鍵關閉警報,則會發現在您釋放按鈕時將觸發事件mouseup