
点文字执行js代码,这段代码错在哪里?
比如点“关于”,弹出一个窗口提示段文字:
<script type="text/javascript">
function about(){
alert("hello");
}
</script>
以下两句都出一样错:找不到对象。
<a href="" onclick="about();">关于</a>
<a href="" onclick="javascript:about();">关于</a> 展开
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>学习</title>
<script type="text/javascript">
function about(){
alert("hello");
}
</script>
</head>
<body>
使用viod(): <a href="javascript:void(0);" onClick="about();">关于</a>
<hr/>
使用href: <a href="javascript:about();">关于</a>
<hr/>
使用return: <a href="" onClick="about();return false;">关于</a>
</body>
</html>
这是完整的,可以通过的HTML文档。
——————以下是解释————————
首先,想要让a标签具有onclick事件,并且该a标签没有链接的话,目前有三种主流的做法:
第一, 就是给href属性中加入一个“javascript:void(0);”。
如果href中没有值的话,一些浏览器会认为你要访问该网站的域名所在页,比如:
<a href="" >链接</a>
这个链接在一些浏览器中会被认为你要访问该站的主域名,其它的一些浏览器也会有自己不同的默认值,所以这么写,会引发很多不可控结果;
那么这种做法是:<a href="javascript:void(0);" onClick="about();" >关于</a>
————
第二,直接在a标签的href属性中执行javascript,只要在要执行的代码前加上"javascript:"就可以:
<a href="javascript:about();">关于</a>
————
第三,可以让href留空或写入任意值,但因a标签在W3C规范中,必须要有href或name属性其一,那么我们可以让其留空或者写入一个“#”,然后让onClick所执行的javaScript返回一个假,用以阻止浏览器执行完onClick后,再去执行后续的跳转:
<a href="#" onClick="about(); return false;">关于</a>
________________________
另外,在XHTML和HTML5中,对标签中行内事件的写法上,事件属性名的大小写有所要求,但这并不是强制的,所以这个问题目前来看并不是引发问题的原因。
比如onclick应该尽可能地写成:onClick,而不是onclick;
只有在JS里面对DOM进行事件处理的时候,是全部小写的:
tag.onclick = function(){about();};
——————————
另外,你不但要注意以上这些,还要注意你的HTML网页结构,是否符合HTML的结构标准,即含有<!doctype>的DOM类型定义、<html>、<head><body>这些必要的结构式标签,如果没有这些,只在你的网页中出现简单的<script>/<a>之类的标签的话,浏览器可能会运行出错。
以上。
viod("0")是个不执行任何操作的空函数?是js现成默认的,还是需要定义的?
这个不是JS默认的。
void()是运算符,对任何值都返回undefined;和typeof运算符号一样可以 void(0) = void 0;
所以,程序员们发现href中支持以javascript:方式执行JS语句后,就将它放在了href里,用以表示什么都不执行、空语句的意思,这们,即照顾了W3C规范,也规避了因为href为空而出现浏览器乱设定其默认值的情况。
上面的代码是你在用的代码,还是你简单写的。
页面只有这些代码吗?
点击关于之前浏览器没有提示其他js错误吗?
<a onclick="javascript:about();">关于</a>
href如果显式的存在,则不能为空,如第一行;要么就不显示它,如第二行。
href=""会报错,因为点击它时,浏览器认为href指定了值,然该值却为空字符串,故而报找不到对象
IE8下你得点击ie下弹出的提示框“Allow blocked content”
或者启用了“增强安全性设置”.
或者你用的IETester
还不行清除一下缓存。