0

このフィドルhttp://jsfiddle.net/fXfSz/を見てください:

コンソールを見るshiftLeftと未定義ですが、次のように定義されています。

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

2 に答える 2

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();
于 2013-09-12T16:51:31.277 に答える
3

関数shiftLeftはグローバル スコープではなく、onloadイベント ハンドラーの 1 つに定義されています。

関数コードからそれを削除しonload、フィドル ラッピング設定を「ラップなし - ヘッド内」に変更します。または、click関数を使用してバインドすることをお勧めします。

しかし、関数には他のバグがあります。多分あなたはこれが欲しい:

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

デモンストレーション

于 2013-09-12T16:51:20.733 に答える