Обнаружение ключевого события (Enter) с помощью JQuery в Javascript (на платформе Linux) - PullRequest
15 голосов
/ 08 августа 2009

Обновление:

Я наконец понял, что «нажатие клавиш» лучше совместимо, чем «нажатие клавиш» или «нажатие клавиш» на платформе 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, если я использую китайский метод ввода?)

Ответы [ 3 ]

46 голосов
/ 09 августа 2009

Попробуйте это

<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>
12 голосов
/ 08 августа 2009

Используйте 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).

0 голосов
/ 08 августа 2009

может быть проблемой, специфичной для браузера. Различные браузеры обрабатывают код клавиши по-разному. Нормализовать это до проверки:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...