Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 涉及document.keydown()函数的未定义变量问题_Javascript_Function_Variables - Fatal编程技术网

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

Javascript 涉及document.keydown()函数的未定义变量问题,javascript,function,variables,Javascript,Function,Variables,问题出在这里,document.onkeydown=checkkeycode 我将两个变量传递给checkeycode e,它存储了事件和keycode,以及我想用变量c的最新位置更新的数组圆。当我将圆传递给函数时,它将变得未定义 {圆[4]=c.uuy}; 返回未定义的错误 我试着把文件放进去。写(圈); 在文档中,它只是写入了未定义的内容,当我用E切换它时,它变成了一个键盘对象。我需要解决的是: 如何将数组圆传递给函数,以便当raphael转换圆时,它更新圆中的值 在if(keycode==

问题出在这里,document.onkeydown=checkkeycode

我将两个变量传递给checkeycode e,它存储了事件和keycode,以及我想用变量c的最新位置更新的数组圆。当我将圆传递给函数时,它将变得未定义 {圆[4]=c.uuy}; 返回未定义的错误 我试着把文件放进去。写(圈); 在文档中,它只是写入了未定义的内容,当我用E切换它时,它变成了一个键盘对象。我需要解决的是:

  • 如何将数组圆传递给函数,以便当raphael转换圆时,它更新圆中的值

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

  • 
    var paper=Raphael(50,50,420,300);
    var d=纸张矩形(150、150、30、30);
    var c=纸圈(50,50,40);
    变量圆=[c.attrs.cy,c.attrs.cx,c.attrs.r,c.ux,c.y];
    var rectie=[d.attrs.x,d.attrs.y,d.attrs.height,d.attrs.width];
    document.onkeydown=checkKeycode
    功能检查键代码(e,圆圈){
    var键码;
    如果(window.event)keycode=window.event.keycode;
    如果(e)keycode=e,则为else;
    如果(keycode==40){c.translate(0,10)};//{circle[4]=c.\uty};///down
    if(keycode==39){c.translate(10,0)};//右
    if(keycode==38){c.translate(0,-10)};//向上
    if(keycode==37){c.translate(-10,0)};//左
    }  
    //删除了我到目前为止的一些评论。
    
    这里有几个问题:

    1) 过场辩论

    我将两个变量传递给checkeycode

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

    如果您更改:

    document.onkeydown = checkKeycode
    

    …您将进入您在全局范围中定义的
    圆圈

    2) 名字

    您的
    checkkeycode
    函数接受参数
    e
    circle
    ,但似乎使用
    e
    c

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

    因此,如果您要进行模块化并在事件处理程序中结束
    循环

    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  
    
    }
    

    只是说:脚本标记中的
    language
    -属性已被弃用。最好使用
    type=“text/javascript”
    。谢谢。我实际上更改了函数,所以我没有将圆圈发送到函数中,只是将其作为全局变量进行访问,它正在工作。我没有料到这一点。我尝试先添加它,然后对其进行修改。不过我会尝试您的建议,非常感谢您的回答。这对我来说真的很重要。@user:没问题。原因是函数有权访问
    circle
    的原因是它的定义范围与
    circle
    的定义范围相同(在本例中为全局范围,但如果在另一个函数中定义函数,则为真)这里的术语是闭包;更多:@user:You是StackOverflow的新手,所以我要说的是:如果您觉得这个答案很有用,请单击旁边的向上箭头——这会给它投票。如果这个答案回答了问题(解决了问题等),请单击答案开头左侧的复选标记。这会将您的问题标记为“已回答”并认为这是正确的答案。
    document.onkeydown = function(e) {
        checkKeycode(e, 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  
    
    }