javascript - 涉及document.keydown()函数的 undefined variable 问题

标签 javascript function variables

问题来了,document.onkeydown = checkkeycode

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

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

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

<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)传递参数

I'm passing two variable to checkeycode

不,你不是。浏览器将向其传递一个参数,即事件(除非是IE,但您已经处理了它)。

如果你改变:

document.onkeydown = checkKeycode

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

...您将传入您在全局范围内定义的

2) 姓名

您的 checkkeycode 函数接受参数 ecircle,但似乎使用 e c 代替。

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

因此,如果您要模块化并只是在事件处理程序中关闭:

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 = function(e) {
    return checkKeycode(e, circle); // Event handler is closure over `circle`
};

//                       v-- `c`, not `circle`
function checkKeycode(e, c) {
    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  

}

关于javascript - 涉及document.keydown()函数的 undefined variable 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4584573/

相关文章:

javascript - 如何在 React Native 中将输入字段添加到列表中?

javascript - Google Plus 图片缓存

javascript - AngularJS 做了一个简单的分组

PHP - 从数据 URI 调整图像大小并压缩图像

javascript - JavaScript 中的全局变量可在函数内更改

选择查询中的 php 变量

javascript - 下拉菜单: open links in new tab + "Go" link

c++ - 如何调用一个函数并让它运行并返回一个字符?

sql-server-2008 - Sql Server 中的错误函数

C++:带连接的多行字符串文字?