2011-10-20 94 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

相关问题