Обнаружение ключевого события (Enter) с помощью JQuery в Javascript (на платформе Linux)
Update:
Наконец-то я понял, что "keypress" имеет лучшую совместимость, чем "keydown" или "keyup" на платформе Linux. Я просто изменил "keyup" / "keydown" на "keypress", так что все прошло хорошо.
Я не знаю, в чем причина, но это решение для меня. Спасибо всем, кто ответил на мой вопрос.
-
У меня есть несколько кодов, которые должны обнаружить событие нажатия клавиши (я должен знать, когда пользователь нажимает Enter) с JQuery, и вот коды в Javascript:
j.input.bind("keyup", function (l) {
if (document.selection) {
g._ieCacheSelection = document.selection.createRange()
}
}).bind("keydown", function(l) {
//console.log(l.keyCode);
if (l.keyCode == 13) {
if(l.ctrlKey) {
g.insertCursorPos("\n");
return true;
} else {
var k = d(this),
n = k.val();
if(k.attr('intervalTime')) {
//alert('can not send');
k.css('color','red').val('Dont send too many messages').attr('disabled','disabled').css('color','red');
setTimeout(function(){k.css('color','').val(n).attr('disabled','').focus()},1000);
return
}
if(g_debug_num[parseInt(h.buddyInfo.id)]==undefined) {
g_debug_num[parseInt(h.buddyInfo.id)]=1;
}
if (d.trim(n)) {
var m = {
to: h.buddyInfo.id,
from: h.myInfo.id,
//stype: "msg",
body: (g_debug_num[parseInt(h.buddyInfo.id)]++)+" : "+n,
timestamp: (new Date()).getTime()
};
//g.addHistory(m);
k.val("");
g.trigger("sendMessage", m);
l.preventDefault();
g.sendStatuses("");
k.attr('intervalTime',100);
setTimeout(function(){k.removeAttr('intervalTime')},1000);
return
}
return
}
}
Он отлично работает в Windows, но в Linux он иногда не может поймать событие Enter. Может кто-нибудь помочь?
Обновлено:
Кажется хорошим, если я использую только английский для разговоров. Но я должен использовать некоторый метод ввода для ввода китайцев. Если это проблема? (JQuery не может обнаружить Enter, если я использую китайский метод ввода?)
Ответы
Ответ 1
Попробуйте это
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" >
<title></title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
</head>
<body>
<div>
<input id="TestTextBox" type="text" />
</div>
</body>
<script type="text/javascript">
$(function()
{
var testTextBox = $('#TestTextBox');
var code =null;
testTextBox.keypress(function(e)
{
code= (e.keyCode ? e.keyCode : e.which);
if (code == 13) alert('Enter key was pressed.');
e.preventDefault();
});
});
</script>
</html>
Ответ 2
Используйте if (l.keyCode == 10 || l.keyCode == 13)
вместо if (l.keyCode == 13)
...
В Windows новая строка состоит из Carriage Return
(13), за которой следует Line Feed
(10).
Под * nix новая строка состоит только из Line Feed
(10).
В Mac новая строка состоит только из Carriage Return
(13).
Ответ 3
Этот может быть проблемой браузера. Различные браузеры обрабатывают код ключа по-разному. Хорошо нормализовать это до проверки:
var code = ev.keyCode || ev.charCode || 0;
Важно отметить, что браузеры webkit имеют несколько другое сопоставление клавиш, чем остальные:
var webkitKeymap = {
63232: 38, // up
63233: 40, // down
63234: 37, // left
63235: 39, // right
63276: 33, // page up
63277: 34, // page down
25: 9 // SHIFT-TAB (Safari provides a different key code in
// this case, even though the shiftKey modifier is set)
};
Этот код можно найти в утилите событий YUI.