このフィドルhttp://jsfiddle.net/fXfSz/を見てください:
コンソールを見るshiftLeft
と未定義ですが、次のように定義されています。
function shiftLeft()
{
for (var char in $('#chars').children())
{
log(char);
char.css({left:char.position().left -100});
}
}
このフィドルhttp://jsfiddle.net/fXfSz/を見てください:
コンソールを見るshiftLeft
と未定義ですが、次のように定義されています。
function shiftLeft()
{
for (var char in $('#chars').children())
{
log(char);
char.css({left:char.position().left -100});
}
}
関数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();
関数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>