なぜこれが機能しないのかを理解しようとして、約4時間壁に頭をぶつけています. SQL クエリの結果の数に応じてコードを動的に記述する必要があるプログラムがあります。
EasyBoxというjqueryライトボックスを使用しています。このようにハードコーディングすると、次のように機能します。
<body id="body" onload="bodyLoaded()">
<a id="link" href="#test" title="Snowflake" rel="lightbox">Hello</a>
<div id="test" style="display:none; width:320px; height:240px">
<p>Test Content</p>
</div>
<script type="text/javascript">
function bodyLoaded(){
$('#link').attr('onclick', 'logText("Hello")');
}
function logText(message){
console.log(message);
}
</script>
ただし、このようにリンクを動的に記述した場合、EasyBox ポップアップは起動しません。
<body id="body" onload="bodyLoaded()">
<div id="test" style="display:none; width:320px; height:240px">
<p>Test Content</p>
</div>
<script type="text/javascript">
function bodyLoaded(){
document.getElementById('body').innerHTML+="<a id='link' href='#test' rel='lightbox'>Hello</a>";
$('#link').attr('onclick', 'logText("Hello")');
}
function logText(message){
console.log(message);
}
</script>
なぜこれがうまくいくのでしょうか?ここで髪を引っ張ります!