この問題を説明するためにJSFiddleを作成しました。doSomething()
関数を呼び出したときにアラートが表示されないのはなぜですか?
6 に答える
これはdoSomething()
、HTMLページで関数が定義されていないためです。jsfiddleでは、関数(jsペイン内)はjqueryのドキュメントonloadイベントによってラップされます。(設定については、jsfiddleの左側を参照してください)。だから、このように実行され、
$(document).ready(function() {
function doSomething() {
alert('Hello!');
}
});
それがどのように包まれたかを見てください。アクセスできません。これを修正するには、オブジェクトに割り当てる必要がありwindow
ます。jsペインで関数を次のように記述します
window.doSomething=function() {
alert('Hello!');
}
それはうまくいくでしょう
onclick
HTML要素の属性を使用しないことをお勧めします。JSでイベントハンドラーを割り当てる方がよいでしょう。
$("img").click(function(){
alert("Hello");
});
javascriptを機能させるには、jsfiddleのフレームワークオプションを無効にする必要があります
function doSomething() {
alert('Hello!');
}
これは「フィドルシング」です。[nowrap (head)
フレームワークの選択]フィールドの最初の選択から選択します。
JsFiddleが行うことは<HTML>
、<head>
および<body>
タグを作成することです。JsFiddleがマークアップを処理した後、マークアップが無効になるため、HTMLに含めるべきではありません。また、ドキュメントのonloadイベントでJSをラップします。したがって、関数は思ったようにルートスコープではなく、関数のスコープで定義されており、document.onload
関数の外部にあるため、本体内から関数に到達できませんでした。JsFiddle属性の「wrapin」を「nowrap(head)」に変更しましたが、機能しました。
あなたの関数dosomeThing()
はページで定義されていません。ヘッダータグをこれに置き換えてください
<head>
<script>
function doSomething() {
alert('Hello!');
}
</script>
</head>
その後、再試行してください
これが完全なコードです。エディターをコピーして貼り付けるだけです。それは
<!doctype html>
<html lang='en'>
<head>
<meta charset='utf-8'>
<title>Javascript Events</title>
<script type='text/javascript'>
window.onload = function() {
var image_one = document.getElementById('imageOne');
var image_two = document.getElementById('imageTwo');
image_one.onclick = function() {
alert('Hello!');
}
image_two.onclick = function() {
alert('Hello!');
}
}
</script>
</head>
<body>
<img id="imageOne" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/0c/White_and_yellow_flower.JPG/320px-White_and_yellow_flower.JPG" />
<img id="imageTwo" src="http://upload.wikimedia.org/wikipedia/en/7/70/Example.png" />
</body>
</html>