неопределенная проблема с переменной с использованием функции document.keydown () - PullRequest
2 голосов
/ 03 января 2011

Вот проблема, document.onkeydown = checkkeycode

Я передаю две переменные в checkeycode e, который хранит событие, и, следовательно, код клавиши и круг массива, который я хочу обновить с помощью последней позиции переменной c.когда я передаю окружность функции, она становится неопределенной, следовательно {circle [4] = c ._. ty};возвращает неопределенную ошибку, я пытался положить document.write (кружок);в документ, и он просто написал неопределенный, и когда я переключил его с E, он стал объектом клавиатуры.Что мне нужно, это решить:

  1. как передать круг массива функции, чтобы, когда Рафаэль переводил круг, он обновлял значения в круге?

  2. в if (keycode == бла) я просто делаю {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 Ответ

3 голосов
/ 03 января 2011

Пара вопросов:

1) Передача аргументов

Я передаю две переменные в контрольный код

Нет, вы не 'т.Браузер передаст ему один аргумент, event (если это не IE, но вы его обработали).

Если вы измените:

document.onkeydown = checkKeycode

to

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

... вы будете передавать circle, который вы определили в глобальной области видимости.

2) Имена

Ваша checkkeycode функцияпринимает аргументы e и circle, но, кажется, вместо этого использует e и c.

(Ваш код checkkeycode уже закрывается над circle в глобальной области видимости, так что выможно просто удалить аргумент circle из определения checkkeycode и использовать circle вместо c. Но лучше всего сохранить модульность, если вы можете, передав аргумент в функцию.)

Так что, если вы используете модульность и просто закрываете circle в обработчике событий:

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  

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