Javascript 为什么JSFIDLE没有定义错误?

Javascript 为什么JSFIDLE没有定义错误?,javascript,jquery,jsfiddle,Javascript,Jquery,Jsfiddle,看看这把小提琴: 如果在控制台中查看,则shiftLeft未定义,但定义如下: function shiftLeft() { for (var char in $('#chars').children()) { log(char); char.css({left:char.position().left -100}); } } shiftLeft函数不是在全局作用域中定义的,而是在onload事件处理程序之一中定义的 从onload函数代

看看这把小提琴:

如果在控制台中查看,则shiftLeft未定义,但定义如下:

function shiftLeft()
{
    for (var char in $('#chars').children())
    {
        log(char);
        char.css({left:char.position().left -100});
    }
}
shiftLeft函数不是在全局作用域中定义的,而是在onload事件处理程序之一中定义的

从onload函数代码中删除它,并将fiddle wrapping设置更改为no wrapp-in head。或者,更好的方法是使用单击功能绑定它

但是你的函数中还有其他的bug。也许你想要这个:

<button id="idofthebutton">Left</button>
<script>
$('#idofthebutton').click(function(){
    $('#chars').children().each(function(){
         $(this).css({left:$(this).position().left -100});
    });
});
</script>
因为函数shiftLeft未在全局范围内定义。它是分配给onload的函数的本地函数,该函数从不运行,因为您已经将JSFiddle配置为只运行分配onload的函数

用JavaScript绑定事件处理程序,而不是onclick属性

function shiftLeft()
{
    for (var char in $('#chars').children())
    {
        // log is not a global
        console.log(char);
        char.css({left:char.position().left -100});
    }
}

function assignHandlers() {
    document.querySelector('button').addEventListener('click', shiftLeft);
}


// If you weren't using JSBin to run this onload:
// addEventListener('load', assignHandlers);
// but since you are:
assignHandlers();

您已将其封装在一个闭包中。您的尝试在许多级别上都是错误的,因此我担心纠正导致您看到的错误的错误不会真正帮助您。对于kicks,下面是您的代码应该是什么样子:。@Tomalak在调试函数之前,我必须让它正确调用@david_adler无意冒犯,但您仍然在努力学习JavaScript和DOM的基础知识,我现在还没有谈到jQuery。我知道,在某件事情上下功夫不是最好的学习方式。有数以百万计的教程,我真的认为你应该先读一些。querySelector?addEventListener?为什么?OP正在使用jQuery。