0

我试图让 span 元素中的文本根据使用 Jquery 中的 keydown 函数按下的键而改变。

该脚本运行良好,直到涉及到我所有的 if 语句。

http://jsfiddle.net/rAhkc/1/

我的脚本示例:

$(document).ready(pressed);
function pressed(){
    $('html').keydown(function (e) {
        var a = 65;var b = 66;var c = 67;
        if (e.keyCode == a){
            $('span').text('a');
            console.log('Key Pressed: a');
        }else if(e.keyCode == b){
            $('span').text('b');
            console.log('Key Pressed: b');
        }else if(e.keyCode == c){
            $('span').text('c');
            console.log('Key Pressed: c');
        }
    });
}

我有 2 个不同的控制台日志,当按下一个键时应该报告这些日志。一种是按下任意键,另一种是按下特定键(目前仅在 a、b 和 c 上)。

有人可以告诉我我做错了什么以及为什么它不起作用?

4

4 回答 4

4

您正在e通过设置其keycode.

制作var ee = 69;什么的。

这是一个演示

于 2013-08-30T01:49:47.753 回答
3

正如 Rooster / FaceOfJock 所说,您正在覆盖 e,这就是为什么不工作的原因。

我在下面进行了一些更改,只是为了提高理解并使代码更小。

// JavaScript Document
$(document).ready(pressed);
console.log('keyPressed.js is running');
function pressed(){
    console.log('pressed script began');    
    $('html').keydown(function (e) {
        console.log(e.keyCode);

        var codes = {
            q:81, w:87, e:69, r:82, t:84, y:89, u:85, i:73, o:79, 
            p:80, a:65, s:83, d:68, f:70, g:71, h:72, j:74, k:75, 
            l:76, z:90, x:88, c:67, v:86, b:66, n:78, m:77, space:32, 
            backspace:8, tab:9, caps:20, enter:13, shift:16, ctrl:17, 
            alt:18
        };

        $.each(codes,function(key,code){
            if(e.keyCode == code){
                $('span').text(key);
                console.log('Key: ' + key);
            }
        });
    });
}

希望这可以帮助。

于 2013-08-30T02:16:39.437 回答
1

你的问题是你覆盖了e. 把名字evt改成什么的。

此外,您应该使用switch语句而不是所有这些ifs。

于 2013-08-30T01:49:48.713 回答
-1
$(function(){
    $(document).keyup(function(e){
        var a = 65;
        var b = 66;
        var c = 67;

        switch(e.which){
            case a:
                console.log('you pressed a')
            break;

            case b:
                console.log('you pressed b')
            break;

            case c:
                console.log('you pressed c')
            break;
        }
    })
})

这是jsfiddle。运行检查元素以查看结果。

从 javascript 事件触发时,e.keyCode 对我来说很麻烦。浏览器之间是不一致的。e.效果更好。我还认为 switch 语句更合适。

http://jsfiddle.net/PnjME/

于 2013-08-30T01:50:11.617 回答