涉及document.keydown()函数的未定义变量问题

时间:2011-01-03 12:54:03

标签: javascript function variables

这是问题,document.onkeydown = checkkeycode

我将两个变量传递给checkeycode e,它存储事件,因此键码和数组圈我想用变量c的最新位置更新。当我将圆圈传递给函数时,因此它变得不确定 {circle [4] = c ._。ty}; 返回一个未定义的错误 我试过把document.write(circle); 进入文档,它只是写了undefined,当我用E切换它成为一个键盘对象。我需要解决的是:

  1. 如何将数组圆圈传递给函数,以便当raphael翻译圆圈时,它会更新圆圈中的值?

  2. if(keycode == blah)中的
  3. 我只是做{c.translate(value)} {circle [4] = c ._。ty}? 将单个if事件附加两个不同的函数?

  4. <html>  
    
    <head>  
    
    <script language="javascript" type="text/javascript" src="/home/andrew/Documents/rahpael/raphael-min.js"></script>
    
    </head>
    
    <body>
    
    <script language="javascript">
    
    var paper = Raphael(50, 50, 420, 300);
    var d = paper.rect(150, 150, 30, 30);
    var c = paper.circle(50, 50, 40);
    var circle = [c.attrs.cy, c.attrs.cx, c.attrs.r, c._.tx, c._.ty];
    var rectie = [ d.attrs.x, d.attrs.y, d.attrs.height, d.attrs.width];
    
    document.onkeydown = checkKeycode
    
    function checkKeycode(e, circle) {
    var keycode;
    if (window.event) keycode = window.event.keyCode;  
    else if (e) keycode = e.which;  
    if (keycode == 40) { c.translate(0, 10)}; //{circle[4] = c._.ty};// down  
    if (keycode == 39) { c.translate(10, 0)}; // right  
    if (keycode == 38) { c.translate(0, -10)}; // up  
    if (keycode == 37) { c.translate(-10, 0)}; // left  
    
    }  
     // deleted some comments I've made so far.  
    
    </script>  
    
    </body>  
    </html>  
    

1 个答案:

答案 0 :(得分:3)

那里有几个问题:

1)传递参数

  

我将两个变量传递给checkeycode

不,你不是。浏览器会将一个参数传递给它event(除非它是IE,但你已经处理过了。)

如果你改变:

document.onkeydown = checkKeycode

document.onkeydown = function(e) {
    checkKeycode(e, circle);
};

...你将传递你在全球范围内定义的circle

2)姓名

您的checkkeycode函数接受参数ecircle,但似乎使用了ec

(无论如何,您的checkkeycode代码已在全局范围内circle关闭,因此您可以从circle的定义中删除checkkeycode参数并使用{{ 1}}而不是circle。但如果可以,最好通过将参数传递给函数来保持模块化。)

因此,如果您要进行模块化,只需在事件处理程序中关闭c

circle