首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Javascript中使用JQuery检测关键事件(Enter) ( Linux平台)

在Javascript中使用JQuery检测关键事件(Enter) ( Linux平台)
EN

Stack Overflow用户
提问于 2009-08-08 06:04:11
回答 3查看 55.9K关注 0票数 15

更新:

我终于发现,在Linux平台上,"keypress“比"keydown”或"keyup“具有更好的兼容性。我刚把"keyup"/"keydown“改成了"keypress",所以一切都很顺利。

我不知道原因是什么,但这是我的解决方案。感谢所有回答我问题的人。

--

我有一些代码需要用JQuery来检测按键事件(我必须知道用户什么时候按Enter),下面是Javascript中的代码:

代码语言: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吗?)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-08-09 17:29:04

尝尝这个

代码语言:javascript
复制
<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>
票数 47
EN

Stack Overflow用户

发布于 2009-08-08 06:19:49

使用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)。

票数 12
EN

Stack Overflow用户

发布于 2009-08-08 14:08:27

此可能是特定于浏览器的问题。不同的浏览器会以不同的方式处理键码。在检查之前对此进行规范化是很好的:

代码语言:javascript
复制
var code = ev.keyCode || ev.charCode || 0;

值得注意的是,webkit浏览器的键映射与其他浏览器略有不同:

代码语言:javascript
复制
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的事件实用程序中找到。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1248100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档