2012-01-22 70 views
0

一旦用戶偏好「a」,按鈕顏色會改變,然後一旦用戶釋放「a」按鈕,它應該應該再次改變。一旦按下字母「a」,按鈕只會改變顏色,而不是釋放時。jQuery KeyUp()問題

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<title>website</title> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script> 
<script type="text/javascript"> 
$(function() { 
    $(document).keyup(function(event) { 
     if (event.which == 97){ 
      $('.button0 input').css('color', 'rgb(0, 0, 255)'); 
     } 
    }); 
    $(document).keypress(function(event) { 
     if (event.which == 97){ 
      $('.button0 input').css('color', 'rgb(128, 0, 0)'); 
     } 
    }); 
}); 
</script> 
<style type="text/css"> 
.button0 input{ 
    position:fixed; 
    left:41px; 
    top:12px; 
    font-family:Arial; 
    font-size:8px; 
    font-weight:normal; 
} 
</style> 
<body> 
    <div class="button0"> 
     <input type="button" style="width: 303px;height: 165px;" value="Button"/> 
    </div> 
</body> 
</html> 
+0

爲什麼你使用'keypress'和'keyup'而不是'keydown'和'keyup'? – nnnnnn

回答

3

jQuery API page.keypress()爲:

注意KeyDown和KEYUP提供指示哪個鍵按下一個代碼,而按鍵指示被輸入的字符。例如,一個小寫的「a」將被keydown和keyup報告爲65,而按鍵則爲97。大寫字母「A」在所有事件中報告爲65。由於這種區別,捕捉箭頭鍵等特殊按鍵時,.keydown()或.keyup()是更好的選擇。

所以,你需要改變event.which == 97event.which == 65keyup處理程序。

+0

哦,我看到了,它現在可以工作,爲什麼會發生這種情況? – thelost

+0

因爲在鍵盤上只有一個帶有字符「A」的鍵,但是字符「A」的小寫和大寫版本。在這裏鍵和大寫字符的代碼是相同的,您可以使用[ASCII圖表](http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters)找出正確的代碼來使用。 – melhosseiny

2

爲什麼你需要檢查,因爲當你做KEYUP再次..鍵代碼如果我理解正確,則下面的代碼應該工作..

$(document).keyup(function(event) { 
    $('.button0 input').css('color', 'rgb(0, 0, 255)'); 
}); 

DEMO這裏

如果你真的想要比較的關鍵和改變顏色,那麼你可以做下面的事情,

更新這裏

$(document).keydown(function(event) { 
    if (event.which == 65){ 
     $('.button0 input').css('color', 'rgb(128, 0, 0)'); 
    } 
}).keyup(function(event) { 
    if (event.which == 65){ 
     $('.button0 input').css('color', 'rgb(0, 0, 255)'); 
    } 
}); 

鏈接到event.which的代碼清單。

+0

用於匹配'keydown'到'keyup'。關於'keyup'上的keycode的測試,我的猜測是這個問題可能並不重要,但是一般情況下,用戶可以按住多個鍵,因此更適合專門測試「a」鍵。 – nnnnnn

0

看來event.which意味着什麼在兩個功能略有不同,因爲這將工作(鉻):

$(function() { 
    $(document).keyup(function(event) { 
     if (event.which == 65){ 
      $('.button0 input').css('color', 'rgb(0, 0, 255)'); 
     } 
    }); 
    $(document).keypress(function(event) { 
     if (event.which == 97){ 
      $('.button0 input').css('color', 'rgb(128, 0, 0)'); 
     } 
    }); 
}); 

也許jQuery是標準化event.which(每http://api.jquery.com/event.which/)爲keyup但不keypress

+0

是否有某種方法將97轉換爲65? – thelost

+0

這不是一個jQuery的東西,這是瀏覽器處理事件的方式。 'keypress'給你與按鍵相關的字符,而'keyup'給出一個鍵碼。 – nnnnnn

0

的問題是,你正在聽你的keyUp()功能錯了鍵,看證件keypress()

注意,KeyDown和KEYUP提供指示被 按下其中的按鍵的代碼,而按鍵指示哪個字符被輸入。例如,對於 示例,小寫的「a」將由keydown和keyup報告爲65, 但按鍵值爲97。大寫「A」在所有 事件中報告爲65。由於這種區別,當捕獲諸如箭頭鍵的特殊擊鍵 時,.keydown()或.keyup()是更好的選擇。

所以解決您的代碼,KeyUp事件更改爲:

$(document).keyup(function(event) { 
    if (event.which == 65) { 
     $('.button0 input').css('color', 'rgb(0, 0, 255)'); 
    } 
}); 

See it working here