javascript函数返回值的问题
现有一javascript代码<html><head><title></title></head><body><scripttype="text/javascript">...
现有一javascript代码
<html>
<head><title></title></head>
<body>
<script type="text/javascript">
function linkSomePage_onclick(){
alert("This link is goning nowhere");
return false;
}
</script>
<a href="somepage.html" name="linkSomePage">
Click Me
</a>
<script type="text/javascript"> window.document.links[0].onclick=linkSomePage_onclick;
</script>
</body>
</html>
当我们将事件处理器作为Html标记的属性的时候
需要加一个关键字return 将返回值返回给onclick事件
如下
onclick="return linkSomePage_onclick()
但是如果将事件处理器作为浏览器对象的属性的时候,为什么不用加关键字return呢?
window.document.links[0].onclick=linkSomePage_onclick 展开
<html>
<head><title></title></head>
<body>
<script type="text/javascript">
function linkSomePage_onclick(){
alert("This link is goning nowhere");
return false;
}
</script>
<a href="somepage.html" name="linkSomePage">
Click Me
</a>
<script type="text/javascript"> window.document.links[0].onclick=linkSomePage_onclick;
</script>
</body>
</html>
当我们将事件处理器作为Html标记的属性的时候
需要加一个关键字return 将返回值返回给onclick事件
如下
onclick="return linkSomePage_onclick()
但是如果将事件处理器作为浏览器对象的属性的时候,为什么不用加关键字return呢?
window.document.links[0].onclick=linkSomePage_onclick 展开
3个回答
展开全部
我以前还真没想过这方面的问题,我根据我的经验,猜测一下。
这样写:onclick="return linkSomePage_onclick()",因为绑定的是一个字符串,应该会涉及javascript里eval或者Function之类的,
比如会理解为onclick=eval("return linkSomePage_onclick()"),或者onclick=new Function("return linkSomePage_onclick()"),
这样解释之后,onclick就可以获得一个可执行的响应函数,到现在我们就可以这样理解了 onclick=function(){
return linkSomePage_onclick();
}
它能使得onclick的响应函数执行完之后onclick获得一个多样化的返回值(当然,它只认false,关键之处),
如果你这样onclick=" linkSomePage_onclick()"
就会解释成这样onclick=function(){
linkSomePage_onclick();
}
这样onclick的响应函数执行完之后click事件处理程序获得一个返回值,就是undefined,这个undefined,click的事件处理机制是不认的(只认false),也就是不会阻止默认行为的发生,
你可以这样写看看,<a href="http://www.baidu.com" onclick="return undefined"></a>,是阻止不了访问百度的哦,而<a href="http://www.baidu.com" onclick="return false"></a>就可以,
我们可以猜想下事件处理程序是什么样的
1.发生click事件
2.执行绑定的响应函数
3.判定返回结果是否恒等于false,注意,是恒等于,是的话,事件处理程序终止,否的话,继续往下执行默认click行为(是链接的话就跳转链接,是提交的话就提交数据)
当然,以上仅是我个人猜想,仅作参考
这样写:onclick="return linkSomePage_onclick()",因为绑定的是一个字符串,应该会涉及javascript里eval或者Function之类的,
比如会理解为onclick=eval("return linkSomePage_onclick()"),或者onclick=new Function("return linkSomePage_onclick()"),
这样解释之后,onclick就可以获得一个可执行的响应函数,到现在我们就可以这样理解了 onclick=function(){
return linkSomePage_onclick();
}
它能使得onclick的响应函数执行完之后onclick获得一个多样化的返回值(当然,它只认false,关键之处),
如果你这样onclick=" linkSomePage_onclick()"
就会解释成这样onclick=function(){
linkSomePage_onclick();
}
这样onclick的响应函数执行完之后click事件处理程序获得一个返回值,就是undefined,这个undefined,click的事件处理机制是不认的(只认false),也就是不会阻止默认行为的发生,
你可以这样写看看,<a href="http://www.baidu.com" onclick="return undefined"></a>,是阻止不了访问百度的哦,而<a href="http://www.baidu.com" onclick="return false"></a>就可以,
我们可以猜想下事件处理程序是什么样的
1.发生click事件
2.执行绑定的响应函数
3.判定返回结果是否恒等于false,注意,是恒等于,是的话,事件处理程序终止,否的话,继续往下执行默认click行为(是链接的话就跳转链接,是提交的话就提交数据)
当然,以上仅是我个人猜想,仅作参考
展开全部
可以这样理解
onclick="return linkSomePage_onclick()" 相当于
window.document.links[0].onclick=function(){ return linkSomePage_onclick();}
html中的 引号 相当于匿名函数结构 function(){}
如果不加return ,在 匿名函数体中就只有一个 linkSomePage_onclick() 事件执行, 由于它返回true / false 简化就相当于
window.document.links[0].onclick=function(){ true / false }
显然....
onclick="return linkSomePage_onclick()" 相当于
window.document.links[0].onclick=function(){ return linkSomePage_onclick();}
html中的 引号 相当于匿名函数结构 function(){}
如果不加return ,在 匿名函数体中就只有一个 linkSomePage_onclick() 事件执行, 由于它返回true / false 简化就相当于
window.document.links[0].onclick=function(){ true / false }
显然....
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
window.document.links[0].onclick=linkSomePage_onclick//添加事件、方法
window.document.links[0].setAttribute("onclick","return linkSomePage_onclick()");//添加属性
window.document.links[0].onclick对应的是方法,也可以是匿名的,如下。
window.document.links[0].onclick = function(){alert(This link is goning nowhere);return false;}
window.document.links[0].setAttribute("onclick","return linkSomePage_onclick()");//添加属性
window.document.links[0].onclick对应的是方法,也可以是匿名的,如下。
window.document.links[0].onclick = function(){alert(This link is goning nowhere);return false;}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询