2011-10-20 13 views
2

ページtest.htmlという中で、次のコードを使用しようとすると:どのように私は明確にリンクを取得します:エラー「予期しないトークン(キャッチされないでSyntaxError」でキャッチされないでSyntaxError:予期しないトークン(

<script language = "javascript"> 
function test() 
{ 
    if (typeof a != "undefined") 
    { 
     document.body.innerHTML = ""; 
     document.write(a); 
    } 
    else 
    { 
     document.body.innerHTML = ""; 
     document.write("a is undefined"); 
    } 
    var a = "a is defined"; 
    document.write("<br><br>"); 
    document.write("<a href='javascript:void(0)' onclick='function(){ test(a); }'>test</a>"); 
} 
window.onload = function(){ test(); } 
</script> 

結果。ページと対応する変数を表示する?

+0

それは変化していますか? – Andreas

+0

コードの問題(実際には構文エラーではない)は、文字列内の関数がクロージャを作成しないということです。 – ThiefMaster

+0

エラーを含む行はどれですか? – Zirak

答えて

4

function(){ test(a); }あなたのonclickの内部には、エラーの原因である。

あなたが関数に表現を取得するために(function(){ test(a); })を使用する必要があるだろうの代わりにステートメントを使用してください。

aはグローバルではなく、HTML on*引数のJavaScriptはクロージャを作成しないため、コードはまだ動作しません。ここで


はjQueryのを使用してproper/working exampleです:あなたは、言語= "javascriptの" 間のスペースを省略したときに

function test(a) { 
    if(a !== undefined) { 
     $('body').html(a); 
    } 
    else { 
     $('body').html('a is undefined'); 
    } 
    var a = 'a is defined'; 
    $('body').append('<br /><br />'); 
    $('<a href="#">test</a>').click(function(e) { 
     e.preventDefault(); 
     test(a); 
    }).appendTo('body'); 
} 

$(document).ready(function() { 
    test(); 
}); 
+0

おそらく私は間違っているが、 'window.onload = test;'また働く? – mpen

+0

@マーク:引数が渡されていないことを確認することはできません。それ以外にdocument.readyは(DOMが準備ができたらすぐに)どんなことを望んでいるのかを早くトリガーします。画像がロードされるのを待つ必要はありません。 – ThiefMaster

+0

通常のJavascriptでこれを行う方法はありますか? SE – SystemError

関連する問題