[英]Javascript protocol and events
以下代码的含义是什么 -
<a href="javacsript:;" onClick="addItem(160)">some link</a>
我的基本疑问是当我们点击链接时运行哪个脚本
onclick
将首先运行。 如果onclick
没有返回false
(在这种情况下它没有),则将处理href
。
href
属性中的javascript
部分是协议(您知道,如http,ftp或mailto)。 它的作用是告诉浏览器URL实际上是JavaScript代码。
通常,当您单击链接时,浏览器将执行它在href
属性中找到的任何内容。 但是,浏览器还会在处理href 之前触发onclick
事件。 因此,设置onclick处理程序将覆盖正常行为。
因此,事件处理程序成为王者,它有可能通过返回true
(允许)或false
(阻止)来允许或阻止默认的浏览器行为。
因此,在您的示例中,当您单击该链接时,浏览器将触发addItem
。 如果它返回false
,则没有任何反应。 如果返回true
,浏览器将执行href
属性中的代码。 但由于它没有找到任何语句(即空语句),所以没有任何反应。
请尝试以下代码:
<a href="http://google.com/" onclick="return false;">won't go to google.com</a>
<a href="http://google.com/" onclick="return true;">will go to google.com</a>
这对你有意义吗?
请注意,当浏览器解释“href”的“javascript:”值时,如果返回值不为空, 则将其解释为<a>
标签所需的文档内容! 这是一个供您欣赏的测试页:
http://gutfullofbeer.net/jslink.html
该页面的来源(查看它;它真的很短)包括以下链接:
<a href='javascript:getLink()'>Click to go there!</a>
函数“getLink()”定义如下:
function getLink() {
var sel = document.getElementById('sel');
return sel.options[sel.selectedIndex].value;
}
如您所见,该函数获取页面上<select>
元素的当前选定值并返回该值。 <select>
元素是什么样的?
<select id='sel'>
<option value='<html><head><meta http-equiv="refresh" content="2;http://cnn.com"/></head><body>Redirecting to CNN ...</body></html>'>CNN</option>
<option value='<html><head><meta http-equiv="refresh" content="2;http://zombo.com"/><head><body>Redirecting to Zombocom ...</body></html>'>Zombocom</option>
<option value='<html><head><meta http-equiv="refresh" content="2;http://reddit.com"/></head><body>Redirecting to Reddit ...</body></html>'>Reddit</option>
</select>
这些选项的值是具有重定向到所请求站点的页面的完整HTML标记。 因为URL返回一个值,所以浏览器将该值理解为新的页面内容。
这真是令人兴奋。 我不知道你为什么要这样做。
你的疑问是真的!你必须在一个javascript文件中找到“function addItem(x)”,该文件通过页面中的脚本标签链接。(通常在head标签中)
href中的“javascript:”是一种告诉浏览器执行javascript而不是转到不同页面的方法。
例如,该行将显示带有“测试”消息的消息框。
<a href="javascript:alert('testing');">Click me</a>
这个将执行一个空的javascript语句,什么都不做
<a href="javacsript:;">Click me</a>
onclick是一个在点击链接时也会触发的事件。 与href相比,它不允许您放置到不同页面的链接; 它只接受javascript。
浏览器将首先触发onclick事件,然后处理href属性。 如果它是一个URL(空href表示当前URL;单击将只刷新页面)它将跟随它,如果它是javascript它将执行它。
放“javascript:;” 或“javascript:void(null);” 内部href是一种古老而错误的技术,以确保浏览器在处理onclick后不会刷新页面。
回答你的问题; 两个脚本都将执行,但href脚本将不执行任何操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.