2011-10-20 105 views
2

嘗試使用下面的代碼在一個頁面的test.html:未捕獲的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> 

結果錯誤「未捕獲的SyntaxError:意外的標記(」我怎麼會得到鏈接可清除頁面,並顯示相應的變量?

+0

當忽略語言= 「JavaScript的」 之間的空間不會修改? – Andreas

+0

與他的代碼(實際上,其中之一 - 不是語法錯誤)的問題是,該字符串內的函數不會創建閉包。 – ThiefMaster

+0

哪一行顯示爲包含錯誤? – Zirak

回答

4

function(){ test(a); }您的onclick裏面是錯誤的原因。

你需要使用(function(){ test(a); })得到一個功能表達代替功能陳述

但是,由於a不是全局的,並且HTML on*參數中的JavaScript不會創建閉包,所以代碼仍然不起作用。


這裏有一個proper/working example使用jQuery:

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

@Mark:然後你不能確定沒有參數被傳遞。除此之外,document.ready更早觸發(只要DOM準備就緒),這通常是人們想要的 - 無需等待圖像被加載等。 – ThiefMaster

+0

您認爲這有什麼辦法可以在普通的Javascript中完成嗎? SE – SystemError

相關問題