2013-03-10 55 views
2

我正在嘗試以下代碼。它應該與輸入的sh屬性更改爲1,每當shift鍵被按下,並恢復到0發佈鍵盤事件未在contextmenu事件後註冊

<!DOCTYPE html> 
<html> 
<head> 
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"> 
</script> 
<script> 
$(document).ready(function(){ 
$(document).on("keyup","body",function(e) { 
    if (e.which == 16) { 
    $("input").attr("sh","0"); 
    } 
}); 

$(document).on("keydown","body",function(e) { 
    if (e.which == 16) { 
    $("input").attr("sh","1"); 
    } 
}); 
}); 
</script> 
</head> 
<body> 
<input type = 'text' sh = '0'/> 
<p>Just checking</p> 
</body> 
</html> 

它工作正常,當執行這一系列事件時除外。在輸入沒有對焦的情況下按shift鍵。 (如預期的,Firebug顯示sh變爲1)。現在按鍵仍然按下,重點放在輸入。現在做一個右鍵點擊輸入。上下文菜單彈出。現在,如果您釋放shift鍵(讓contextmenu保持不變),Firebug會顯示sh仍然爲1.您可以單擊contextmenu以外的其他設備,或者單擊paste選項將剪貼板文本粘貼到輸入中,仍然可以使用sh 1.如果再次按下並釋放shift,則只有sh再次變爲0。

任何想法如何解決這個問題?

+0

您是否需要檢查所有'文檔'上的'shift'鍵或輸入是否足夠? – 2013-03-10 10:42:47

+0

而不是「身體」嘗試「*」。希望這會有所幫助。 – 2013-03-10 10:46:45

+0

@KundanSinghChouhan,沒有好運的伴侶,如果我使用'*',它仍然是1! – SexyBeast 2013-03-10 11:12:45

回答

0

以下內容對您有幫助嗎? 我不確定我是否正確模擬了您的場景,但似乎適用於我。我在Chrome中進行了測試。

$(文件)。就緒(函數(){

$(document).keyup(function (e) { 
    if (e.which == 16) { 
     $("input").attr("sh", "0"); 
     console.log($("input").attr("sh")); 
    } 
}); 

$(document).keydown(function (e) { 
    if (e.which == 16) { 
     $("input").attr("sh", "1"); 
     console.log($("input").attr("sh")); 
    } 
}); 

//Works... (holding shift will raise keydown as much as I hold the key...) 
//$(document).keyup(function (e) { 
// if (e.keyCode == 16) { 
//  console.log("Shift was released..."); 
// } 
//}); 

//$(document).keydown(function (e) { 
// if (e.keyCode == 16) { 
//  console.log("Shift was pressed down..."); 
// } 
//}); 

});