为什么JsFiddle给出未定义的错误?

时间:2013-09-12 16:48:55

标签: javascript jquery jsfiddle

看看这个小提琴http://jsfiddle.net/fXfSz/

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

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

2 个答案:

答案 0 :(得分:4)

因为函数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();

答案 1 :(得分:3)

您的shiftLeft函数未在全局范围内定义,而是在onload事件处理程序中定义。

将其从onload功能代码中删除,并将小提琴包装设置更改为“无包装头”。或者,更好的是,使用click函数绑定它。

但是你的功能还有其他错误。也许你想要这个:

<button id="idofthebutton">Left</button>
<script>
$('#idofthebutton').click(function(){
    $('#chars').children().each(function(){
         $(this).css({left:$(this).position().left -100});
    });
});
</script>

Demonstration